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用户可写可执行。
缩放图片尺寸
安装ImageMagick,debian/ubuntu安装命令:
apt install imagemagick
typecho-MyUpload插件增加缩放宽度选项。
打开MyUpload/Plugin.php
文件,找到config()
函数,增加以下代码:$resizeWidth = new Typecho_Widget_Helper_Form_Element_Text( 'resizeWidth', NULL, '800', _t('图片缩放最大宽度'), _t('当图片宽度超过此值时,等比例缩放到指定宽度,值为0时不缩放。') ); $form->addInput($resizeWidth);
然后就可以在后台插件管理设置需要的宽度:
修改
compressImage()
函数,最前面增加以下代码,获取插件面板设置的缩放宽度:// 等比例缩放到指定宽度(小于指定宽度不缩放) $resizeWidth = htmlspecialchars(Typecho_Widget::widget('Widget_Options')->plugin('MyUpload')->resizeWidth); $resizeWidth = is_numeric($resizeWidth) ? intval($resizeWidth) : 0;
继续修改
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); }
增加图片缩放功能实现:
打开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 "); } }