图像大小和操作顺序

时间:2016-08-08 作者:hookedonwinter

我正在优化我的网站,其中一部分是压缩图像和使用较小的版本。我正在使用WP Smush并为每个图像创建一组大小。所有图像都被弄脏了。

我的模板是非常定制的,我在一些地方没有使用普通的所见即所得。在这些情况下,我编写了两个函数来根据需要提取较小的图像大小:

(注意:第一个函数来自https://wordpress.org/support/topic/need-to-get-attachment-id-by-image-url)

function get_image_id_by_link($link){
    global $wpdb;

    $link = preg_replace(\'/-\\d+x\\d+(?=\\.(jpg|jpeg|png|gif)$)/i\', \'\', $link);

    return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid=\'$link\'");
}

function get_image_url($url, $preferred_size = 900){
    $id = get_image_id_by_link($url);

    if(wp_get_attachment_image_src($id, array($preferred_size, $preferred_size))) {
        return wp_get_attachment_image_src($id, array($preferred_size,$preferred_size))[0];
    }
    else if(wp_get_attachment_image_src($id, array(900,900))) {

        return wp_get_attachment_image_src($id, array(900,900))[0];
    } 
    else if(wp_get_attachment_image_src($id, \'medium_large\')){
        return wp_get_attachment_image_src($id, \'medium_large\')[0];
    } 
    else if (wp_get_attachment_image_src($id, \'large\')){
        return wp_get_attachment_image_src($id, \'large\')[0];
    } 
    else {
        return $url;
    }
}
此功能适用于我现在上载和使用的任何图像。但是,在我推这个函数之前上传的任何图像都会拉取全尺寸的图像url。我已经证实,这些图像(早期的图像)确实尺寸较小。

虽然我可以重新上传所有图像,但我很好奇为什么会发生这种情况,以及我如何修复它。

谢谢

编辑

以下是注册尺寸,根据get_intermediate_image_sizes():

Array
(
    [0] => thumbnail
    [1] => medium
    [2] => medium_large
    [3] => large
    [4] => medium-box
    [5] => large-box
    [6] => responsive-100
    [7] => responsive-150
    [8] => responsive-200
    [9] => responsive-300
    [10] => responsive-450
    [11] => responsive-600
    [12] => responsive-900
)

1 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

wp_get_attachment_image_src 将始终返回文件的URL(如果图像存在一定大小)。如果您要求的大小不存在,那么您将获得上传的全尺寸图像的URL。(这不是“大”图像大小。)

因此,对于有效的图像ID,您的条件if(wp_get_attachment_image_src($id, array($preferred_size, $preferred_size))) 将永远成功wp_get_attachment_image_src 始终返回URL,即使该URL不是您期望的URL。

为了修复它,我建议您不要破坏API,而是使用它。

相关推荐

Broken images on iphone

我在iPhone上破坏了图像,这只发生在我大约一周前添加新图像的主页上(新图像的格式和大小与旧图像完全相同)这是网站:CartonMaster。伊利诺伊州公司提前感谢,