【发布时间】:2015-05-04 22:37:18
【问题描述】:
我需要一种方法(使用内置 PHP 库)从 URL 下拉图像并将其保存到本地磁盘,并将其调整大小/缩放 WIDTH 为 150 像素。我一直在尝试这个:
Creating a thumbnail from an uploaded image
function makeThumbnails($updir, $img, $id)
{
$thumbnail_width = 134;
$thumbnail_height = 189;
$thumb_beforeword = "thumb";
$arr_image_details = getimagesize("$updir" . $id . '_' . "$img"); // pass id to thumb name
$original_width = $arr_image_details[0];
$original_height = $arr_image_details[1];
if ($original_width > $original_height) {
$new_width = $thumbnail_width;
$new_height = intval($original_height * $new_width / $original_width);
} else {
$new_height = $thumbnail_height;
$new_width = intval($original_width * $new_height / $original_height);
}
$dest_x = intval(($thumbnail_width - $new_width) / 2);
$dest_y = intval(($thumbnail_height - $new_height) / 2);
if ($arr_image_details[2] == 1) {
$imgt = "ImageGIF";
$imgcreatefrom = "ImageCreateFromGIF";
}
if ($arr_image_details[2] == 2) {
$imgt = "ImageJPEG";
$imgcreatefrom = "ImageCreateFromJPEG";
}
if ($arr_image_details[2] == 3) {
$imgt = "ImagePNG";
$imgcreatefrom = "ImageCreateFromPNG";
}
if ($imgt) {
$old_image = $imgcreatefrom("$updir" . $id . '_' . "$img");
$new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imagecopyresized($new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height);
$imgt($new_image, "$updir" . $id . '_' . "$thumb_beforeword" . "$img");
}
}
这看起来很有希望,但我不知道如何使用它,以及它是否会做我想要的。关注/需求:
- 这些参数是什么意思:
($updir, $img, $id)--$updir是文件的位置吗?或者我想要保存的位置?$img是文件句柄还是文件名?还是文件的新名称?$id是干什么用的?作者没有给出任何示例用法。 - 该功能似乎需要我指定宽度和高度。我只想指定 WIDTH 并让高度成比例。
- 我需要通过 2 种不同类型的 URL 拉取图像:(1) 基本 http://foo...,以及 (2) 数据语法:
data:image/jpeg;base64,/9j/4AAQ.... - 理想情况下,我希望在所有情况下都将这些图像转换为压缩的 jpeg 缩略图(150 像素宽度,任意高度),即使原始图像不是 jpg 格式。
最好的方法是什么?
【问题讨论】:
-
好吧,您发布的脚本看起来像是基于图像上传到服务器上运行的,
$updir将是包含它们的目录的路径,$id和$img是其中的一部分某种命名约定的文件名。所以简而言之,这只有在您下载/复制文件后才有效。 -
看看stackoverflow.com/a/27362839/3641016,我提供了一个小助手函数来调整不同模式的图像大小。
-
拉斐尔,你成功了。想发布你的答案,以便我可以给你赏金吗?
-
在下面检查我的答案。我使用 ImageCreateFromString 删除所有手动文件检测,因为它已经由 PHP 内部处理。
标签: php image-processing