如何从图像源裁剪特定大小的图像

时间:2017-06-12 作者:Eh Jewel

我通过metabox字段从用户输入中获得了图像src。现在,我想以特定的大小渲染此图像。就像WordPress以特定大小裁剪图像一样。

我尝试从src获取图像ID,然后使用下面的函数获取具有大小图像的图像src。

<?php
$img_id = get_image_id($img_src);
$sized_img_src = wp_get_attachment_image_src($img_id, \'image_size\');
这是get_image_id() 功能:

function get_image_id($image_url) {
global $wpdb;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=\'%s\';", $image_url ));
return $attachment[0];
}
实际上,我并没有用这个函数获取上传图像的图像ID。问题出在哪里?

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

WordPress有一个专门为此设计的功能。这个attachment_url_to_postid() 允许您从附件的URL中检索附件的ID,然后您可以使用该URL稍后获取帖子的ID。

如果您想通过编写MySQL查询来实现这一点,我建议您在meta_value 而是:

$basename = basename ($image_url);
$sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = \'$basename \'";
$id = $wpdb->get_var($sql);
发布帖子后,GUID列将在数据库中硬编码。因此,如果在localhost上发布帖子,示例GUID如下:

http://localhost/wp-content/uploads/my-image.jpg
但您将使用以下内容在线搜索图像的URL:

$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=\'%s\';", $image_url ));
很明显,这将一无所获。但是您可以使用LIKE 结合basename:

$img_name = basename ($image_url);
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid LIKE \'%s\';", $img_name ));
这与第一种方法大致相同。

结束