我正在尝试在我的django项目中制作图像压缩器。我在jpg上做得很好,但是在png上遇到了很多问题。对于压缩,我使用PIL和cv2,但对于大型PNG文件(> 1 mb),压缩效果无法达到16%。香港专业教育学院试图结合两个库,它仍然不是天真的。这是我认为的简单代码:
(以上用于jpg压缩的代码)
elif picture.mode == ('RGBA'):
if photo.image.size < 1000000:
colorsloss = picture.convert(mode="P", palette=Image.ADAPTIVE)
colorsloss.save('media/new/'+name,"PNG",quality=75, optimize=True, bits=8)
else:
originalImage = cv.imread(str('/home/andrey/sjimalka'+ photo.image.url))
cv.imwrite('media/new/'+name, originalImage,[cv.IMWRITE_PNG_COMPRESSION, 9])
cvcompressed = Image.open('media/new/'+name)
cvcompressed.convert(mode="RGB")
cvcompressed.save('media/new/'+name,"PNG",quality=75, optimize=True)
所以我在这里遇到了两个大问题: 1)如果香港专业教育学院获得了较小尺寸的图像(<1 mb),则在枕头中使用P模式。它的效果很好,但是如果我使用渐变压缩图像,则在出现渐变的地方会看到一些失真。 我的压缩效果很好(大约85%),但不知道如何解决。
2)我无法很好地压缩大png文件。我最好的目标是达到16%,质量非常好,但是仍然不是天真的。 mb我做错了事,或者我拒绝使用任何其他库或技术来使其变得更好。我想获取大png文件压缩50%的列表。
我已经尝试使用pngquant,但是他们的文档对我来说还不太清楚,我找不到很好的代码示例。
答案 0 :(得分:1)
PNG无损。您无法选择在写入时放弃信息以像JPEG一样缩小文件的大小。
如果您选择的是浅色版本,则每个像素只需要一个字节,而不是三个字节,但是您只能得到256种颜色,并且渐变看起来很垃圾。
此外,质量设置与JPEG的质量设置不同-它更像--fast
的{{1}}或--best
参数。
如果像您一样具有较大的透明度区域,您可以做的一件事就是使所有100%透明的像素变黑。那将帮助他们更好地压缩。参见example here。