我无法按原来的方式使用@nvartolomei解决方案。这不是功能性的,但仍然是一个很好的起点。
这是我的最终解决方案:
我添加3个新image sizes
将原来的3种尺寸翻倍。
然后我在PHP中调用它们时放入过滤器,以替换with
和height
非视网膜等效物(因为它并不总是除以2)。
原件:src=image.jpg
宽度=4800
高度=4000
大型(600x600):src=image-600x500.jpg
宽度=600
高度=500
大视网膜(600x600):src=image-1200x1000.jpg
宽度=600
高度=500
原文:src=image.jpg
宽度=900
高度=750
大型(600x600):src=image-600x500.jpg
宽度=600
高度=500
大视网膜(600x600):src=image.jpg
宽度=600
高度=500
功能。php:
add_action( \'init\', \'cjg_register_sizes\' );
add_filter( \'image_downsize\', \'cjg_retina_scale\', 10, 3 );
function cjg_register_sizes(){
add_image_size( \'large_retina\', get_option( \'large_size_w\' ) * 2 , get_option( \'large_size_h\' ) * 2 );
add_image_size( \'medium_retina\', get_option( \'medium_size_w\' ) * 2 , get_option( \'medium_size_h\' ) * 2 );
add_image_size( \'thumbnail_retina\', get_option( \'thumbnail_size_w\' ) * 2 , get_option( \'thumbnail_size_h\' ) * 2 );
}
function cjg_retina_scale( $value, $id, $size ) {
if ( $size == \'large_retina\' OR $size == \'medium_retina\' OR $size == \'thumbnail_retina\' ) {
if ( !is_array( $imagedata = wp_get_attachment_metadata( $id ) ) )
return false;
if ( $size == \'large_retina\') $regular_size = \'large\';
elseif ( $size == \'medium_retina\') $regular_size = \'medium\';
else $regular_size = \'thumbnail\';
$img_url = wp_get_attachment_url( $id );
$img_url_basename = wp_basename( $img_url );
if ( isset( $imagedata[\'sizes\'][$regular_size] ) ) {
$width = $imagedata[\'sizes\'][$regular_size][\'width\'];
$height = $imagedata[\'sizes\'][$regular_size][\'height\'];
if ( isset( $imagedata[\'sizes\'][$size] ) )
$url = str_replace($img_url_basename, $imagedata[\'sizes\'][$size][\'file\'], $img_url);
else
$url = $img_url;
}else{
$url = $img_url;
$width = $imagedata[\'width\'];
$height = $imagedata[\'height\'];
}
return array( $url, $width, $height );
}
return $value;
}
现在你可以这样称呼你的图片
wp_get_attachment_image( $attachment->ID, \'thumbnail_retina\' );
wp_get_attachment_image( $attachment->ID, \'medium_retina\' );
wp_get_attachment_image( $attachment->ID, \'large_retina\' );
重要提示:添加3个新尺寸后,我用
the regenerate-thumbnails plugin