typecho图片压缩和缩放大小

手机拍的照片都很大,如果不压缩显示会很慢。安装typecho-MyUpload插件,上传图片时可以自动压缩。在原插件基础上稍微修改代码,实现调整图片尺寸功能(网页显示没必要整高清图片)。

安装typecho-MyUpload

插件地址 GitHub: https://github.com/jlice/typecho-MyUpload
下载解压后放入usr/plugins/目录下,插件运行需要安装jpegoptim(jpg压缩)和pngquant(png压缩),debian/ubuntu安装命令:

apt install jpegoptim pngquant

插件启用后,如果上传图片失败,检查一下插件目录权限,调整为www-data用户可写可执行。

缩放图片尺寸

  1. 安装ImageMagick,debian/ubuntu安装命令:

    apt install imagemagick
  2. typecho-MyUpload插件增加缩放宽度选项。
    打开MyUpload/Plugin.php文件,找到config()函数,增加以下代码:

    $resizeWidth = new Typecho_Widget_Helper_Form_Element_Text(
     'resizeWidth', NULL, '800',
     _t('图片缩放最大宽度'), 
     _t('当图片宽度超过此值时,等比例缩放到指定宽度,值为0时不缩放。')
    );
    $form->addInput($resizeWidth);

    然后就可以在后台插件管理设置需要的宽度:
    设置上传图片最大宽度

  3. 修改compressImage()函数,最前面增加以下代码,获取插件面板设置的缩放宽度:

      // 等比例缩放到指定宽度(小于指定宽度不缩放)
         $resizeWidth = htmlspecialchars(Typecho_Widget::widget('Widget_Options')->plugin('MyUpload')->resizeWidth);
         $resizeWidth = is_numeric($resizeWidth) ? intval($resizeWidth)  : 0;
  4. 继续修改compressImage()函数,调用compress_png_inplace和compress_jpg_inplace时增加刚获取的缩放宽度$resizeWidth,修改后的代码:

    if ($ext === "png") {
     compress_png_inplace($path, $resizeWidth);
    }
    elseif ($ext === "jpg" || $ext === "jpeg") {
     compress_jpg_inplace($path, $resizeWidth);
    }
  5. 增加图片缩放功能实现:
    打开MyUpload/functions.php文件,对于jpg缩放,找到compress_jpg_inplace()函数,修改为以下代码,函数形参增加$max_width:

    function compress_jpg_inplace($jpg_path,$max_width=0,$max_quality = 90){
     shell_exec("jpegoptim --max=$max_quality --preserve --all-progressive $jpg_path");
     // 以下新增
     if($max_width>0){
         return shell_exec("mogrify -resize '$max_width>' $jpg_path ");
     }
    }

    png缩放修改compress_png_inplace()函数。

    function compress_png_inplace($png_path, $max_width=0, $max_quality = 90)
    {
     $min_quality = 60;
     shell_exec("pngquant --skip-if-larger --ext .png --force --quality=$min_quality-$max_quality $png_path");
     if($max_width>0){
         return shell_exec("mogrify -resize '$max_width>' $png_path ");
     }
    }
THE END

标签: Linux typecho

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。


相关文章