首页 文章

PHP GD编辑Jpeg而无需重新压缩

提问于
浏览
2

假设我有一个jpeg文件,我想将某些像素设置为某种颜色 . 当我保存jpeg时,我正在失去颜色,我看到围绕我的新像素出现锯齿,即使我将质量设置为100.我知道这是一种有损格式,但我不想重新压缩图片,只需设置一个几个像素 .

// Create the GD resource
$img = imagecreatefromjpeg($filename);

// Set the first pixel to red
$color = imagecolorallocate($img, 255, 0, 0);
imagesetpixel($img, 0, 0, $color);

// Save the jpeg - is this where I'm wrong? I see the red pixel but it's the wrong color and is blurred.
imagejpeg($img, 'foo.jpg', 100);

// Lossless format works fine, red pixel is bright and accurate.
imagepng($img, 'foo.png');

那么GD可能不是去这里的方式吗?我确实需要更改某些像素的颜色,并且在保存时需要准确 . 有没有办法在不依赖GIF,PNG或JPEG2000的情况下做到这一点?

1 回答

  • 4

    正如你自己所说,JPEG是一种有损格式 . 它实际上并不直接存储“像素” . 如果对图像进行更改,则必须重新压缩图像 . 没有办法解决这个问题 .

    你的红色像素是“错误的颜色”和“模糊”的原因是因为JPEG压缩的工作原理 . 同样,它不存储像素 . 它强调亮度的变化,实际的颜色信息并不重要 .

    我不是肯定的,但您可能只能重新压缩受您的更改影响的几个块 . 您无法使用任何标准函数执行此操作,并且必须自己深入研究格式和压缩方案 .

相关问题