Resize External Image

时间:2017-04-21 作者:pexichdu

我的主题是使用下面这样的函数来获取具有特定大小的帖子特征图像。从字体末端看,“摄影画廊网格”意味着裁剪高度为529px的图像,并按比例保持宽度,尽管我找不到它的位置。

  $small_image_url = wp_get_attachment_image_src($image_id, \'photography-gallery-grid\', true);
我需要的是,我有一个外部图像url,并尝试使用它来代替媒体库中的url,我想以与函数相同的方式裁剪它。我一直在努力,但仍然找不到解决办法。请帮助我,例如:

 I want http://imagehost.com/doraemon.jpg  
 to become http://imagehost.com/doraemon-700x529.jpg

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

我为您编写了此函数,它将首先复制外部图像,裁剪它,并返回其ID:

function external_image_loader ($image_url, $post_id, $title) {
    $img_name = basename ($image_url);
    global $wpdb;
    $query = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = \'$img_name\'";
    $id = $wpdb->get_var($query);
    if (is_numeric($id)) {
        return $id;
    } else {
        $attachment_src = media_sideload_image( $image_url, $post_id, $title,\'src\' );
        $query = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = \'$img_name\'";
        $id = $wpdb->get_var($query);
        return $id;
    }
}
以下是您将如何使用此功能:

$small_image_url = wp_get_attachment_image_src(external_image_loader($image_url, $post_id, $title), \'photography-gallery-grid\', true);

How does it work?

首先,该函数提供了一个图像URL和一个帖子id。这两个是必需的,但标题不是。它将检查数据库中是否已经存在该图像,如果id存在,则函数会将id返回给wp_get_attachment_image_src() 最终会得到你想要的结果。

但如果没有,它将使用media_sideload_image(). 之后,它将在数据库中搜索图像并返回其ID。

如果图像的高度为529px或更小,则不会对其进行裁剪。

如果不想保存图像的副本,则必须通过JavaScript来实现。查看this 问题

如前所述,PHP也可以在不保存图像的情况下执行此操作,但这最终会耗尽服务器的资源并降低网站的速度。

相关推荐

Remove <p></p> after images

我对<p></p> 出现在my之后的标记<img....>. 以下是我在本地主机上查看生成的页面时显示的内容。。。<img src=\"/wp-content/themes/wunderful/assets/images/feedback-danielle.png\" alt=\"Danielle Johnson Deal Town FC Treasurer\"> <p></p> 请注意随机生成的<p>&