0

我之前发布了另一个调整大小的脚本不起作用,我对这个脚本做了更深入的了解,它做的事情有点不同。

我走得更远了,只是现在有一个新问题。代码的前三行成功地将三个相同的文件放置在与文件相同的目标目录中,并且它是相应命名的两个缩略图文件。然后我想加载仍然是全尺寸的缩略图,并调整它们的大小,但脚本停在了imagecreatefromjpeg()那里,我似乎无法弄清楚为什么,因为$src它有一个值。

我认为我可以删除该行并在我的函数中替换$source为,这让我更加接近。但它随后返回目标大小的缩略图,但缩略图是 black$srcimagecopyresized()

move_uploaded_file($tmpFilePath, $newFilePath);
copy($newFilePath, $thumb500);
copy($newFilePath, $thumb200);


function thumbImage($src, $dest, $newheight) {
  list($width, $height) = getimagesize($src);

  $newwidth = $width * ($newheight / $height);

  // Load
  $thumb = imagecreatetruecolor($newwidth, $newheight);
  header('Content-type: image/jpeg');
  $source = imagecreatefromjpeg($src);

  // Resize
  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

  // Output
  imagejpeg($thumb, $dest);
}

thumbImage($thumb500, $thumb500, 500);
thumbImage($thumb200, $thumb200, 200);

我觉得这一定是一个普遍的问题。有什么建议吗?

4

2 回答 2

0

对我来说,如果我使用 JPEG 图像作为源,则提供的代码块可以工作。

问题可能是您使用了使用透明度的 PNG 图像。由于 JPEG 无法处理透明胶片,透明背景颜色将被填充。也许这就是问题所在。如果没有,请提供具有问题行为的示例图像。

于 2013-10-14T02:53:51.970 回答
0

5

imagecopyresized 将图像资源作为其第二个参数,而不是文件名。您需要先加载文件。如果您知道文件类型,则可以使用 imagecreatefromFILETYPE 来加载它。例如,如果它是 JPEG,则使用 imagecreatefromjpeg 并传递文件名 - 这将返回一个图像资源。

如果您不知道文件类型,一切都不会丢失。您可以将文件作为字符串读取并使用 imagecreatefromstring (自动检测文件类型)按如下方式加载它: {$oldImage = imagecreatefromstring(file_get_contents($_FILES['image']['tmp_name'])); } 在此处输入代码

于 2021-12-22T00:07:49.673 回答