图像加载加速之道--图像压缩
in 默认分类 with 13 commentsand 1224 read

图像加载加速之道--图像压缩

in 默认分类 with 13 commentsand 1225 read

弄博客以来一直很头疼网站的图片加载速度,一般一张原图要加载很久,发的照片集要等到一到两分钟,期间试过很多网络加速的法子,都是小有提高,直到前几天发现了YIR老哥的博客,发现图片都压缩过,这才恍然大悟,可能我之前都走入了歧途。
说到图片压缩,一般的处理照片的都是用的Photoshop和Lightroom,前者精修,后者批处理,在保存导出的时候可以控制图片的大小和素质。之前在学习opencv的时候发现其实也可以通过算法处理图片,结合python特地弄了一波
原图0.jpg
第一种压缩方式 4.21M -> 406k101.jpg

#-*-coding:utf-8-*-

#导入计算机视觉库opencv和图像处理库PIL
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import cv2
import time

#标定计时器
time1 = time.time()
#读取图像
image=cv2.imread("c:/pic//0.jpg")

#双三次插值
res = cv2.resize(image, (1280,960), interpolation=cv2.INTER_AREA)

#写入图像
cv2.imwrite("C:/pic/101.jpg",res)

#图像对比度增强
imgE = Image.open("c:/pic/101.jpg")
imgEH = ImageEnhance.Contrast(imgE)
img1=imgEH.enhance(2.8)

#图像转换为灰度图
gray = img1.convert("L")
gray.save("C:/pic/3.jpg")

# 灰度过滤卷积
gary2=gray.filter(ImageFilter.DETAIL)
gary2.save("C:/pic/2.jpg")

#图像点运算
gary3=gary2.point(lambda i:i*0.9)
gary3.save("C:/pic/4.jpg")
#img1.show("new_picture")


time2=time.time()
print (u'总共耗时:' + str(time2 - time1) + 's')

#创建窗口并显示图像
cv2.namedWindow("Image")
imagedst = cv2.imread("C:/pic/101.jpg")
cv2.imshow("Image",imagedst)
cv2.waitKey(0)
#释放窗口
cv2.destroyAllWindows()

第二种压缩方式 4.21 -> 405k201.jpg

#-*-coding:utf-8-*-

#导入计算机视觉库opencv和图像处理库PIL
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import cv2
import time
#标定计时器
time1 = time.time()
#读取图像
image=cv2.imread("c:/pic//0.jpg")

#双三次插值
res = cv2.resize(image, (1280,960), interpolation=cv2.INTER_AREA)

#写入图像
cv2.imwrite("C:/pic/201.jpg",res)

#图像对比度增强
imgE = Image.open("c:/pic/201.jpg")
imgEH = ImageEnhance.Contrast(imgE)
img1=imgEH.enhance(2.8)

#图像转换为灰度图
gray = img1.convert("L")
gray.save("C:/pic/23.jpg")


# 灰度滤波卷积
gary2=gray.filter(ImageFilter.DETAIL)
gary2.save("C:/pic/22.jpg")

#图像点运算
gary3=gary2.point(lambda i:i*0.9)
gary3.save("C:/pic/24.jpg")
# img1.show("new_picture")
time2=time.time()
print (u'总共耗时:' + str(time2 - time1) + 's')

#创建窗口并显示图像
cv2.namedWindow("Image")
imagedst = cv2.imread("C:/pic/201.jpg")
cv2.imshow("Image",imagedst)
cv2.waitKey(0)
#释放窗口
cv2.destroyAllWindows()
评论
  1. 可以看看Guetzli哇 效率更高。。。

    回复
  2. 我直接使用美图秀秀,可以压缩图片

    回复
    1. @车店长

      嗯,美图的压缩算法也可以,笔记专门做这个的,优化很良好

      回复
  3. 小白只能自带画图压缩,再上传

    回复
    1. @木月

      竟然想到用画图压缩,优秀

      回复
  4. 和ps的比较下有没有差别~

    回复
    1. @小彦

      哈哈,差别还是有的,算法是opencv自带,并没有对图像质量做优化,很暴力的压缩,把图放大了看也会发现的,那天搜了一下看来几篇有关机器学习的图片压缩算法实现,只是太复杂了,弄不来

      回复
  5. YIR

    哇!你这是利用编程来压缩的!!

    回复
    1. @YIR

      只是突然想到了,做了个试验,算法还是不行,图像素质影响太大了,还是老老实实用Photoshop改的好

      回复
      1. @九七年

        普通展示用压缩图,放大显示用原图不就好了嘛。

        回复
        1. @雾仙

          好主意!等我有时间改下之前那个前辈的lightbox插件试试。

          回复
  6. 图片压缩以后看上去失去了生机

    回复
    1. @Rinvay

      压缩必定会损失图像质量,这两个是opencv自带的插值滤波算法,也不是特别好,只能说很快,压缩率很高,图片的加载速率优化,是个很头疼的问题啊

      回复