所以,我想写一个非常简单的小页面来演示代码转换和压缩。我不明白为什么图像在第一个之后似乎没有改变。
<!-- imagemanipulation.php -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Image Transcoding Example</title>
</head>
<body>
<h1>Image Transcoding Example</h1>
<form action="imagemanipulation.php" method="POST">
Quality (0 - 100): <input type="text" name="quality" value="<?php echo (isset($_POST['quality']) ? $_POST['quality'] : ""); ?>"><br />
Iterations: <input type="text" name="iterations" value="<?php echo (isset($_POST['iterations']) ? $_POST['iterations'] : "")?>"><br />
<input type="submit">
</form>
<hr />
<?php
if (isset($_POST['quality']) && isset($_POST['iterations']))
{
$quality = intval($_POST['quality']);
$iterations = intval($_POST['iterations']);
$image = imagecreatefromjpeg("image.jpeg");
for ($i = 0; $i < $iterations; $i++)
{
ob_start();
imagejpeg($image, NULL, $quality);
$rawImageBytes = ob_get_clean();
echo "<img width=100 height=100 src='data:image/jpeg;base64," . base64_encode($rawImageBytes) . "' />";
imagedestroy($image);
$image = imagecreatefromstring($rawImageBytes);
}
}
?>
</body>
</html>发布于 2015-09-21 14:14:51
这是JPEG编码器的预期行为。如果使用特定编码器配置对图像进行解码并使用相同的配置重新编码,结果将与原始编码图像相同--“往返”不会改变图像。
发布于 2015-09-21 14:17:11
在循环结束时,您需要执行以下操作:
$image = imagecreatefromstring($rawImageBytes);每一次,你都在创建一个质量较低的新图像,并试图增加质量。否则,您无法提高此图像的质量!
您应该删除此行,并从第一个image.jpeg中保留$image。
https://stackoverflow.com/questions/32687010
复制相似问题