0

这个有点两部分,因为任何一个都可以解决我的问题。

精选图像时升级小于指定的缩略图大小时的特色图像

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

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

强制升迁的另一种方法是为任何上传的 GIF 文件创建 JPG 替代品。目前,大于缩略图大小的 GIF(例如 200x200 的 GIF,当缩略图大小为 150x150 时)会自动生成静态 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 自己的功能来完成它。任何帮助将不胜感激!

4

1 回答 1

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);
于 2013-09-05T09:15:10.647 回答