作者:豆豆
来源:Python技术
前两天在知乎热搜看到一个帖子。某省会城市卫生代码连续崩溃两次。在之前的报道中,相关公司也声称将1M的画面优化到100kb需要两天两夜的时间。
报告中提到:“为了保证系统更高效地运行,他们将一张图片从1MB压缩到500KB,然后从500 KB优化到100kb。”
同时还声称,这种工作看似简单,却蕴含着高科技含量。工程师连续两天两夜守在电脑前,终于攻克了难关。
关于卫生法典的崩溃,网上众说纷纭,但新闻一定是真的假的。就等官方发布最终消息了。不信,不说。
今天,我们简单讨论一下图像压缩。
图像压缩在工作中是必不可少的,尤其是涉及到图像的传输和存储。比如微信、微博、知乎等等都需要考虑如何存储如此大量的图片。
众所周知,Python有很多图像库,做图像压缩并不容易。
PILPIL是Python图像库的缩写,功能非常强大。它只用三行代码就能压缩图像。
先来看看原图。
从PIL导入Image im = Image . open(& # 34;girl.jpg & # 34) im . save(& # 34;girl-out 2 . jpg & # 34;,quality=10) # quality就是压缩比 。我们来看看压缩后的情况。
从上面的压缩结果来看,质量设置为10时,从2.5MB压缩到400KB,整体效果还是不错的。但总体来说,画面有些失真,尤其是画面突然放大后,失真更明显,不信我。
经过多次实验,发现设置质量为20是最好的。此时图像的最终大小压缩到500KB,图像不会失真。
实际上,PIL提供了许多缩放图片的方法。让我们试试另一种方法。
from PIL import Image im = Image.open("girl.jpg") w, h = im.size im.thumbnail((w // 2, h // 2)) im.save("girl-out.jpg")
从PIL导入Image
im = Image . open(& # 34;girl.jpg & # 34)
w,h = im . size
im . thumbnail((w//2,h//2))
im . save(& # 34;girl-out . jpg & # 34;)
在上面的代码中,我们首先获取图片的原始大小,然后直接将图片缩放到原始大小的50%。最终的画面大小是343KB,画面看起来不会失真。
所以缩略图()的效果比设置质量好。
当然,PIL还提供了resize()函数来缩放图片,大家可以自己试试。
OpenCVOpenCV也是一个相对易用的操作图像的库,用四行代码实现图像缩放。
import cv2 as cv img = cv.imread("girl.jpg") resize_img = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST) cv.imwrite('girl-out3.jpg', resize_img)
将cv2导入为cv
img = cv . im read(& # 34;girl.jpg & # 34)
resize_img = cv.resize(img,(0,0),fx=0.25,fy=0.25,插值= cv。INTER _ NEAREST)
cv . im write(& # 39;girl-out 3 . jpg & # 39;,resize_img)
在上面的代码中,我们先读入原图,然后放大到原图的四分之一。从结果来看,效果还不错。大小合适,图像无明显失真。
总结今天,我们介绍了两个高质量的图像处理库。从结果来看,两个库的压缩效果差不多。其实这两个库不仅适合图片压缩,还有很多高级玩法,朋友们自己会解锁。
除了本文提到的两个图像操作库,你知道有什么方便好用的图像库吗?可以在评论区分享给我们哦~