2012-03-31 41 views
1

wordpress对图片有很好的支持。PHP Wordpress动态自定义图片尺寸

得到新的图像尺寸,一个只想补充一些功能,如:

add_theme_support('post-thumbnails'); //thumnails 
set_post_thumbnail_size(200, 120, true); // Normal post thumbnails 
add_image_size('single-post-thumbnail', 400, 300,False); // single-post-test 
add_image_size('tooltip', 100, 100, true); // Tooltips thumbnail size 
/// and so on and so on 

我的问题是:

别人怎样才能让这些功能作用以动态的方式,这意味着那些大小会在上传时计算?

例如 - 如果我上传3000x4000像素的图像 - 我想我的图像尺寸是:

add_image_size('half', 50%, 350%, False); // Half the original 
add_image_size('third', 30%, 30%, true); // One Third the original 

有没有办法做到这一点?我可以在哪里挂钩? 这些图像大小已用于许多功能注册 - 有人可以想到一个优步 - 创造性的方式来实现吗?

回答

1

您可以使用wp_get_attachment_image_src获得一个附件的尺寸减小的图像,你如果你只需要在你的functions.php文件中指定add_theme_support('post-thumbnails')然后在模板中执行以下操作:

$id = get_post_thumbnail_id($post->ID) 
$orig = wp_get_attachment_image_src($id) 
$half = wp_get_attachment_image_src($id, array($orig[1]/2, orig[2]/2)) 
$third = wp_get_attachment_image_src($id, array($orig[1]/3, orig[2]/3)) 
etc... 
+0

感谢半图像的新图像你的答案 。首先 - 它被用于插件 - 而不是主题。第二 - 如果我会使用这种方法 - 上传时不会创建拇指,或者我错了吗? – 2012-03-31 10:10:04

+0

你也可以在插件中调用'wp_get_attachment_image_src'。是的,重新调整大小的图像将在第一次调用该方法时创建,但我想您可以挂钩到“add_attachment”并在原始上传之后创建它们。 – 2012-03-31 10:44:13

+0

但可以有1000个原件 - 每个帖子可以有10个或20个... – 2012-04-01 09:52:22

2

或者你可以使用过滤器image_resize_dimensions

我已经安装有奇怪的宽度和高度,像这样

add_image_size('half', 101, 102); 

然后使用的过滤器,以仅当半图像大小被调整大小

add_filter('image_resize_dimensions', 'half_image_resize_dimensions', 10, 6); 

function half_image_resize_dimensions($payload, $orig_w, $orig_h, $dest_w, $dest_h, $crop){ 
    if($dest_w === 101){ //if half image size 
     $width = $orig_w/2; 
     $height = $orig_h/2; 
     return array(0, 0, 0, 0, $width, $height, $orig_w, $orig_h); 
    } else { //do not use the filter 
     return $payload; 
    } 
}