升迁Wordpress特色图像缩略图/始终将GIF转换为JPG

时间:2013-04-23 19:05:45

标签: image wordpress thumbnails

这个有两个部分,因为要么可以解决我的问题。

当选定的图像小于指定的缩略图尺寸时,可以使用特色图像

如果上传的文件小于最小设置的缩略图大小 - 例如缩略图大小为150x150时的100x100图像,则Wordpress不会强制升迁。除了使用像Imagemagick这样的外部资源外,我有什么方法可以强制升级吗?

在每个实例中将上传的GIF转换为JPG

强制升迁的另一种方法是为任何上传的GIF文件创建JPG替代方案。现在,GIF大于缩略图大小 - 例如当缩略图大小为150x150时为200x200 GIF - 会自动生成静态JPG缩略图。

我正在使用

以编程方式生成缩略图
// Inserts metadata and creates thumbnails for uploaded file
$attach_id = wp_insert_attachment($attachmentMeta, $newFile, $post_id);
$attach_data = wp_generate_attachment_metadata($attach_id, $newFile);
wp_update_attachment_metadata($attach_id, $attach_data);

// Adds the thumbnail to the post
update_post_meta($post_id, '_thumbnail_id', $attach_id);

虽然我可以使用Imagemagick做所有这些,但我更喜欢使用Wordpress自己的功能来完成它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

从Wordpress 3.6开始,我不相信有一种内置的方法来“升迁”输入图像,以便在源图像太小的情况下它适合/填充请求的缩略图大小。

缩小规模很简单。任何寻求这个问题的解决方案的人现在都知道很多用户似乎建议/混淆“add_image_size”作为此类问题的适当解决方案。它不是整个解决方案。

重要的是要注意,如果源图像的宽度或高度小于预定义的缩略图/图像大小尺寸(即通过add_image_size或通过设置指定的尺寸),则WP将返回原始源图像一个缩略图。显然这可能令人沮丧。

许多其他用户建议只使用CSS来达到预期的效果;例如,强制最小宽度或高度。虽然CSS可以在许多情况下使用,但它不会在每个情况下工作,特别是在您处理流畅或响应式布局的情况下。

下面是一个粗略的,未经测试的过滤器,用于强制缩略图始终适合所需的尺寸。将它放在你的functions.php中,它还需要在你的主题中提供timthumb.php。您可能需要对其进行修改以适应您的具体情况,也许可以通过多种方式对其进行改进。

function my_image_downsize($src_data, $thumbnail_id, $size) {
    static $omit = false;
    global $_wp_additional_image_sizes;

    if($omit) {
        return $src_data;
    }

    $omit = true;

    $thumbnail_src_data = wp_get_attachment_image_src($thumbnail_id, $size);

    $img_url = $thumbnail_src_data[0];
    $width = $thumbnail_src_data[1];
    $height = $thumbnail_src_data[2];

    if(is_string($size) && isset($_wp_additional_image_sizes[$size]) && ($width < $_wp_additional_image_sizes[$size]['width'] || $height < $_wp_additional_image_sizes[$size]['height'])) {
        // "Upsize" the image as needed, to meet the minimum dimension of the thumbnail.
        $width = $_wp_additional_image_sizes[$size]['width'];
        $height = $_wp_additional_image_sizes[$size]['height'];
        $img_url = get_stylesheet_directory_uri() .'/timthumb.php?src='.$img_url.'&w='.$width.'&h='.$height.'&zc=2&cc=000000'; // TODO: replace timthumb with WP's native media class
    } else {
        $omit = false;
        return $src_data;
    }

    $omit = false;

    return array($img_url, $width, $height);
}
add_filter('image_downsize', 'my_image_downsize', 10, 3);