为web使用优化plone内容图像
collective.optimage的Python项目详细描述
目录
How it works
网站用户将继续正常加载图像内容,但加载的数据将从 用于执行的外部优化软件(必须位于服务器上) 图像无损转换。
这样,最终的结果通常是一个较小的图像,由浏览器快速加载。
默认情况下,仅添加此插件是不够的。必须包含所有已安装的受支持软件 在您的服务器上(或限制它为您想要使用的内容)。
为此,请在构建配置中包含适当的zcml文件:
[instance] ... eggs = Plone ... collective.optimage zcml = ... collective.optimage:wantedoptimizator1.zcml collective.optimage:wantedoptimizator2.zcml ...
所有wantedoptimizatorx条目必须是下面支持的软件之一。 例如:
zcml = collective.optimage:jpegoptim.zcml collective.optimage:optipng.zcml
要包含它们(不包括pngout),只需包含“all.zcml”。
Supported software
现在,此产品支持以下命令行工具:
- jpegoptim
- 用于jpeg优化-http://freecode.com/projects/jpegoptim
- jpegtran
- 用于jpeg优化-http://jpegclub.org/jpegtran/
- gifscicle
- 用于git优化-http://www.lcdf.org/gifsicle/
- optipng
- 用于PNG优化-http://optipng.sourceforge.net/
- pngcrush
- 用于PNG优化-http://pmt.sourceforge.net/pngcrush/
- pngout(slow)
- 用于PNG优化-http://advsys.net/ken/util/pngout.htm
Adding your own
如果您想为其他软件提供支持,可以在您自己的产品中使用zca。 您需要为IOptimageProvider interface提供一个命名适配器。
例如:
<adapter name="yournewsoftware" for="plone.app.blob.interfaces.IATBlobImage zope.publisher.interfaces.browser.IHTTPRequest" provides="collective.optimage.interfaces.IOptimageProvider" factory="yout.products.module.YourSoftwareAdapter" />
最后,适配器类将如下:
from zope.interface import implements from collective.optimage.interfaces import IOptimageProvider class YourSoftwareAdapter(object): """Optimize using yournewsoftware""" implements(IOptimageProvider) for_image = 'jpeg' def optimize(self): // do stuff, calling external process
请注意,必须使用插件填充for_image以提供要威胁的图像类型。
Tips and know issues
Command line tool position
现在这个产品将尝试运行上面给出的所有软件,只需调用它们。 如果运行zope进程的用户无法使用该程序,则可以手动指定 它是。 如果软件是手动安装的(例如:如果您手动下载 并将其安装在构建安装中,而不是系统范围内)。
为此,请提供名为“softwarename\u path”的环境变量。例如:
[instance] ... environment-vars = ... JPEGOPTIM_PATH /opt/local/bin/jpegoptim
Content types
现在只支持plone图像内容类型。不幸的是消息项仍然没有使用 zope blob支持,因此不会获得任何优化。
On performance (again)
现在优化已经完成了,在图像加载到plone之后。事件在 图像源更改,然后将图像放到临时文件中,然后进行处理。 之后,再次加载优化的图像。
这也适用于所有缩放图像版本。
这是低效的,所以将来可能会改变,但这是我发现的唯一没有猴子补丁的方法 扑通一声。