nlh*_*hma 7 python optimization png wand
我想使用魔杖调整大小并优化png和jpg图像大小.
使用PIL,如果指定优化选项,我可以以大约3倍的大小保存相同的图像.
with open(filename, 'rb') as f:
pimage = PImage.open(f)
resized_pimage = pimage.resize((scaled_width, scaled_height), PImage.ANTIALIAS) bytes_buffer = io.BytesIO()
resized_pimage.save(bytes_buffer, format="PNG", optimize=True)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定Wand的等效选项是什么:
with default_storage.open(filename, 'rb') as f:
img = WImage(file=f)
img.resize(width=scaled_width, height=scaled_height, filter='gaussian')
with WImage(width=scaled_width, height=scaled_height) as png:
png.composite(img, top=0, left=0)
png.format = 'png'
bytes_buffer = io.BytesIO()
png.save(file=bytes_buffer)
Run Code Online (Sandbox Code Playgroud)
我读了关于ImageMagic图像优化几篇文章(例如http://www.smashingmagazine.com/2015/06/efficient-image-resizing-with-imagemagick/),但我怎么能在棒做这些(不是很明显我是Wand或PIL的完全新手.
任何帮助/指针将不胜感激.
使用魔杖设置优化将需要一些额外的 MagickWand 库扩展/配置。这是因为quality需要在wand数据结构上设置属性,而不是图像的实例。使困惑?我是。幸运的是,Python 的 Wand 库让这一切变得简单。请尝试以下操作。
# Require wand's API library and basic ctypes
from wand.api import library
from ctypes import c_void_p, c_size_t
# Tell Python's wand library about the MagickWand Compression Quality (not Image's Compression Quality)
library.MagickSetCompressionQuality.argtypes = [c_void_p, c_size_t]
# Do work as before
from wand.image import Image
with Image(filename=filename) as img:
img.resize(width=scaled_width, height=scaled_hight)
# Set the optimization level through the linked resources of
# the image instance. (i.e. `wand.image.Image.wand`)
library.MagickSetCompressionQuality(img.wand, 75)
img.save(filename=output_destination)
Run Code Online (Sandbox Code Playgroud)
png格式有多种“优化”类型,但我的印象是您正在寻求一种减小图像大小的方法。
我相信wand.Image.compression_quality这就是你要找的。
# Require wand's API library and basic ctypes
from wand.api import library
from ctypes import c_void_p, c_size_t
# Tell Python's wand library about the MagickWand Compression Quality (not Image's Compression Quality)
library.MagickSetCompressionQuality.argtypes = [c_void_p, c_size_t]
# Do work as before
from wand.image import Image
with Image(filename=filename) as img:
img.resize(width=scaled_width, height=scaled_hight)
# Set the optimization level through the linked resources of
# the image instance. (i.e. `wand.image.Image.wand`)
library.MagickSetCompressionQuality(img.wand, 75)
img.save(filename=output_destination)
Run Code Online (Sandbox Code Playgroud)
以上不会像您期望的JPEG格式那样将质量降低到 75% ,但会指示使用哪个 PNG 压缩库/算法/过滤器。请参阅PNG 压缩和更好的 PNG 压缩示例。
from wand.image import Image
with Image(filename=filename) as img:
img.resize(width=scaled_width, height=scaled_hight)
img.compression_quality = 75
img.save(filename=output_destination)
Run Code Online (Sandbox Code Playgroud)
因此,将质量设置为75将7在执行adaptive过滤器后使用 zlib 级别进行压缩。请注意,这只是级别和过滤器,而不是优化策略。可以使用 CLI 选项设置优化策略,-define png:compression-strategy=zs但是wand尚未实现图像伪影方法。
| 归档时间: |
|
| 查看次数: |
4120 次 |
| 最近记录: |