无法评论,必须与其他版本一起发布。
问题:
如果Update 2) Set jpeg quality per image size name 在接受的答案是完整的。wp_get_additional_image_sizes()
返回global $_wp_additional_image_sizes
并且不包含有关默认大小(如中、大或缩略图)的任何信息。
这可能在筛选器中不起作用:“large”=>2
截至年月日https://codex.wordpress.org/Function_Reference/get_intermediate_image_sizes 使用自定义代码解释如何使用自定义函数检索所有大小。
我说得对吗?
其次,按名称过滤不同“大小”的想法很棘手。_resize( $max_w, $max_h, $crop = false )
仅理解和分析匹配的宽度、高度和裁剪值,并且每个匹配都假设匹配一个名称。但在许多情况下,该名称将是“另一个”名称。
具有相同“shop\\u product”设置的“medium”图像设置将仅作为其中之一“访问”此功能。然后,我们不知道过滤的是“中等”尺寸还是“shop\\u product”尺寸。因为,这里的目标只是图像的技术裁剪。
与的想法Update 2) 这是一种更具逻辑性的处理方式,但恐怕技术架构并不存在。在构建过滤器之前,分析所有注册图像大小,这将成为舒尔进一步发展的目标,使舒尔能够返回当前主题的正确质量图像程序。
具有相同设置的所有大小名称将共享相同的新质量,因为它们在服务器上共享相同的图像。
所以,如果你仍然坚持update 2) 我认为您需要调用另一个函数来填充$sizes
变量,并通过var\\u dump()分析$_wp_additional_image_sizes
用于相等设置。
中的方法1) A workaround by... 更具逻辑/语义。我们通过相同的扩展方法解决了这个问题,但使用了动态过滤器:
add_filter(\'wp_image_editors\', function($editors){
if(!class_exists(\'ENTEX_Image_Editor_GD\')){
class ENTEX_Image_Editor_GD extends WP_Image_Editor_GD {
private $wp_quality = null;
protected function _resize($max_w, $max_h, $crop = false){
$condition = ($crop ? \'true\' : \'false\');
if($this->wp_quality === null) $this->wp_quality = $this->get_quality();
$quality = apply_filters(\'wp_editor_set_quality_\'. $max_w .\'x\'. $max_h .\'_\'. $condition, $this->wp_quality);
$this->set_quality((int) $quality);
return parent::_resize( $max_w, $max_h, $crop );
}
}
}
array_unshift($editors, \'ENTEX_Image_Editor_GD\');
return $editors;
});
为了过滤每个单独的图像大小,我们使用:
add_filter(\'wp_editor_set_quality_160x160_true\', function($quality){
return 96;
});
与此扩展版本的另一个不同之处是,我们正在使用/填充
add_filter(\'jpeg_quality\' ...
版本作为默认值。
以下是其他一些自定义过滤器的示例:
function high_quality_on_medium_images(){
$in = \'medium\';
$max_w = get_option($in.\'_size_w\');
$max_h = get_option($in.\'_size_h\');
$crop = get_option($in.\'_crop\');
$condition = ($crop ? \'true\' : \'false\');
add_filter(\'wp_editor_set_quality_\'. $max_w .\'x\'. $max_h .\'_\'. $condition, \'my_theme_high_quality_images\', 10, 1);
}
add_action(\'after_setup_theme\', \'high_quality_on_medium_images\', 99);
function my_theme_high_quality_images($quality){
return (int) 82;
}
Developers attention
<在主题图像设置后应用Make shure滤波器不要裹在里面
is_admin()
然后,ajax调用、前端、远程发布的图像不会产生影响如前所述,裁剪值可以是0或false,您必须将(int)或(bool)转换为字符串
$condition = ($crop ? \'true\' : \'false\');
Theme developers attention
WP默认压缩是非常渐进的。值介于
80
和
99
可能会带来巨大的差异
or 根本没有可见的结果。无压缩值为
100
, 可能返回a
bigger filesize 关于“较小尺寸”
800 px 图像,
then 原来的大
3000 px 已调整大小的版本。
多年后,我们发现了一个神奇的数字96,文件大小变小了,但你看不到100
值压缩。
高质量photoshop制作的商店图片,大于800px就可以了,Wordpress默认为82。但iPhone“大”电子邮件发布的图像在缩略图等小尺寸上确实需要96的值。在Wordpres压缩时,它们会变得“柔和模糊”。
如果您没有为您的项目、用户或主题规划方案,您将过度使用此主题解决方案。
A final reflexion
我真的很失望Wordpress,这个重要的问题在开发的优先考虑中被忽视了,因为图像比以往任何时候都更重要,是唯一有效的加载。
我们能不能在合适的地方安装一个过滤器,用于单独的压缩?他们不厌其烦地“更改名称”为wp\\U editor\\U set\\U quality,并且add_filter(\'jpeg_quality\' ...
现已弃用。为什么不一直思考这个问题,把if ( ! $this->quality )
只检查一次@birgire提到的方法。