使用PHP扩展Imagick解决WordPress缩略图不清晰的问题

在解决掉不自动生成所有图片缩略图的难题后,又发现了另外一个问题,也就是WP自带的缩略图生成代码生成的缩略图质量不咋的,特别是从大图不裁切直接缩略成小图后,感觉总是有点朦朦,模糊的感觉。即使按下面代码将图片质量压缩成最大清晰度,也还是差强人意。

add_filter('jpeg_quality', function($arg){return 100;});

问题有了,解决方法也是会有的,也就是使用PHP扩展Imagick来解决了. 以下代码使用前提是你的网站架构必须安装了PHP扩展Imagick。

function imagick_sharpen_resized_files( $resized_file ) {
	if ( ! extension_loaded( 'imagick' ) || ! class_exists( 'Imagick', false ) || ! class_exists( 'ImagickPixel', false ) ) {
		return false;
	}
	if ( version_compare( phpversion( 'imagick' ), '2.2.0', '<' ) ) {
		return false;
	}
	
	$image = new Imagick( $resized_file ); 
	$size = @getimagesize( $resized_file );
	if (!$size)
		return new WP_Error('invalid_image', __('Could not read image size.'), $file);
	list($orig_w,$orig_h,$orig_type) = $size;
	
	switch($orig_type) {
		case IMAGETYPE_JPEG:
			$image->normalizeImage();
			$image->unsharpMaskImage(0, 0.5, 1, 0.05);
			$image->setImageCompressionQuality(100);
			$image->setImageFormat("jpg");
			$image->setImageCompression(Imagick::COMPRESSION_JPEG);			
			$image->writeImage( $filename );			
			break;
			
		default:
			return $resized_file;
	}
	$image->destroy();
	return $resized_file;	
}

以上代码重点是利用unsharpMaskImage线性反锐化掩模(UnSharp Masking,UM)算法来提高图像边缘锐利度,具体细节可以参考这个网站在线对比图片边缘锐利度的效果:unsharpMaskImage

UnsharpMaskImage

设计好后,再使用WordPress钩子来引用此功能

add_filter('image_make_intermediate_size','imagick_sharpen_resized_files',900);

 

Previous/Next

Say Something!

Leave a Reply