2

我想出了这个:

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, 150, 150); 

imagejpeg($create, null, 100); 

?>

它通过访问:

http://example.com/image.php?dir=thisistheimage.jpg

哪个工作正常......但输出很糟糕:

替代文字

有人可以将我的代码修复为覆盖黑色区域的 150 x 150 图像...

谢谢。

解决方案:

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

list($width, $height) = getimagesize($dir);

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 

$newwidth = 150;
$newheight = 150;

imagecopyresized($create, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagejpeg($create, null, 100); 

?>
4

3 回答 3

6

使用imagecopyresized

$newwidth = 150;
$newheight = 150;
imagecopyresized($create, $image, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);
于 2010-05-30T20:05:15.113 回答
1

最后 2 个150应该是全尺寸图像的原始宽度和高度。

于 2010-05-30T20:10:42.433 回答
1

正如其他人所建议的,最后两个参数应该是图像的原始大小。

如果 $dir 是您的文件名,您可以使用getimagesize获取图片的原始尺寸。

您可以使用 imagecopyresized 或 imagecopyresampled。不同之处在于 imagecopyresized 将复制和调整大小,而 imagecopyresampled 也会重新采样您的图像,这将产生更好的质量。

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir);
list($width, $height) = getimagesize($dir);
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height);

imagejpeg($create, null, 100); 

?>
于 2010-05-30T20:26:35.063 回答