展示图像压缩,图像在第一次之后不会改变

时间:2015-09-21 03:42:14

标签: php

因此,非常简单的小页面我尝试编写以演示转码和压缩。我无法弄清楚为什么图像在完成第一个图像之后似乎没有变化。

<!-- 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>

2 个答案:

答案 0 :(得分:0)

这是JPEG编码器的预期行为。如果使用特定编码器配置编码的图像被解码并使用相同的配置重新编码,则结果将与原始编码图像相同 - “往返”不会改变图像。

答案 1 :(得分:0)

在循环结束时,您可以:

$image = imagecreatefromstring($rawImageBytes);

每次,您都会创建质量较差的新图像并尝试提高质量。或者,您无法提高此图像的质量!

你应该删除这一行并保留第一张image.jpeg中的$ image。