由于服务器的空间比较小,只有1G的空间(毕竟是阿里云的免费虚拟服务器)。再加上又不太想弄七牛那些作为图床,本身也不要求高清图片,所以想着把上传的图片给压缩以节省空间。可是网上给出的代码无一都是雷同的结构。
<?php add_filter( 'jpeg_quality', 'bavotasan_custom_jpeg_quality' ); function bavotasan_custom_jpeg_quality( $quality ) { return 100; } ?>
而他们几乎没有人提到这段代码的具体作用,只是说把代码添加到functions文件中就能压缩jpg图片了,可是试了好多遍也不见效果,该多大就多大,于是我不停的google,终于发现了答案。原来这段代码只对上传后所裁剪的图片(即各种缩略图)进行压缩,并不会对原图片文件进行压缩!!!
所幸的是,在google找了很多次后,终于发现一位机智的大神给出了正确的答案,关键就在于filter的使用,他给出的filter为wp_handle_upload,而不是其他人所说的jpeg_quality这个,然后我把他给出的代码贴到functions文件中后,惊奇的发现居然奏效了!!!(心里有点小激动)利用的就是php自带的imagejpeg这个函数自带的压缩参数。
经试验,将image quality参数设为60(0-100),发现基本能把500k到2M的图片压缩至50k到90k之间,这压缩效果简直不能再好了,而且基本没有模糊,尺寸也不需要改变。
这是那位大神贴出的代码:链接地址(http://wordpress.stackexchange.com/questions/193617/how-to-change-compression-of-wordpress-uploads-including-original-image)
function wt_handle_upload_callback( $data ) { $image_quality = 30; // Change this according to your needs $file_path = $data['file']; $image = false; switch ( $data['type'] ) { case 'image/jpeg': { $image = imagecreatefromjpeg( $file_path ); imagejpeg( $image, $file_path, $image_quality ); break; } case 'image/png': { $image = imagecreatefrompng( $file_path ); imagepng( $image, $file_path, $image_quality ); break; } case 'image/gif': { // Nothing to do here since imagegif doesn't have an 'image quality' option break; } } return $data; } add_filter( 'wp_handle_upload', 'wt_handle_upload_callback' );
可以根据自身需要设置quality的值,个人推荐60.这段代码有一处错误,就是imagepng并没有quality这个参数(要是有的话就好了),所以需要改进一下。
改进后:
function wt_handle_upload_callback( $data ) { $image_quality = 60; // Change this according to your needs $file_path = $data['file']; $image = false; switch ( $data['type'] ) { case 'image/jpeg': { $image = imagecreatefromjpeg( $file_path ); imagejpeg( $image, $file_path, $image_quality ); break; } case 'image/png': { $image = imagecreatefrompng( $file_path ); imagejpeg( $image, $file_path, $image_quality );//注意,imagepng并没有quality这个选项,使用imagejpeg则不会保存png的rgba通道,即没有透明度 break; } <pre>case 'image/gif': { // Nothing to do here since imagegif doesn't have an 'image quality' option break; } } return $data; } add_filter( 'wp_handle_upload', 'wt_handle_upload_callback' );
改进后有点不足的是,png图片的透明通道并不会被保存,但目前并没有发现图片变黑的情况,而且,只要你想完全可以将代码优化的更好,更强大,毕竟钩子用对了。
发表回复
要发表评论,您必须先登录。