@
wzw 我试了 PIL 的所有 resample filter,似乎都不行,出来的都是模糊的,另外 Image.ANTIALIAS == Image.LANCZOS 。
不过 opencv 的 resize 效果还行,下面是可运行的代码:
import cv2
def main():
im = cv2.imread('big_image.png')
im_resize = cv2.resize(im, (800, 600), interpolation=cv2.INTER_LANCZOS4)
write_param = [cv2.IMWRITE_PNG_COMPRESSION, 5]
cv2.imwrite('big-resized.png', im_resize, write_param)
if __name__ == "__main__":
main()
上面的 interpolation 类似 PIL 中的 resample filter,除了 cv2.INTER_LANCZOS4,还可以试试 cv2.INTER_AREA,这俩出来的效果比较接近。还有一点值得注意的是,你给的原图只有 20kb 左右,opencv 出来的图片文件大小变大了不少,应该是压缩算法导致的,上面 wirte_param 那行可以调整压缩比例,最高 9,但是压缩下来的图片还是比原图大了不少。