我写了这段代码,如果找不到请求的图像,它会动态地重新调整图像的大小,然后存储它。
唯一的问题是输出的jpg图像质量较低。
我想知道我是否需要改变一些东西来提高图像质量。
if (isset($_GET['size'])) {
$size = $_GET['size'];
}
if (isset($_GET['name'])) {
$filename = $_GET['name'];
}
$filePath = "files/catalog/" . urldecode($filename);
// Content type
header('Content-Type: image/jpeg');
// Get new sizes
list($width, $height) = getimagesize($filePath);
if ($_GET["name"] && !$size) {
$newwidth = $width * $percent;
$newheight = $height * $percent;
} else if ($_GET["name"] && $size) {
switch ($size) {
case "thumbs":
$newwidth = 192;
$newheight = 248;
break;
case "large":
$newwidth = 425;
$newheight = 550;
break;
}
}
$resizedFileName = $filename;
$resizedFileName = str_replace(".jpg", "", $resizedFileName) . ".jpg";
$resizedFilePath = "files/catalog/" . urldecode($resizedFileName);
if (!file_exists($resizedFilePath)) {
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filePath);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Output
imagejpeg($thumb, $resizedFilePath);
//file_put_contents($, $binarydata);
$imageContent = file_get_contents($resizedFilePath);
echo $imageContent;
} else {
$imageContent = file_get_contents($resizedFilePath);
echo $imageContent;
}发布于 2012-06-12 23:59:29
除了imagecopyresized(),您必须使用imagecopyresampled(),并且imagejpeg()函数有第三个可选参数,您可以指定quality。
发布于 2012-06-13 00:00:15
可能是因为您使用了错误的imagejpeg(),函数中的第二个变量代表质量百分比!
发布于 2012-06-13 00:00:16
你想要imagecopyresampled()。调整大小的工作方式是丢弃不必要的像素。resampled()将求出平均值,并产生更平滑的结果。
https://stackoverflow.com/questions/11000327
复制相似问题