我正在使用ColdFusion的<cfimage>来调整图像的大小,然后在服务器上保存为#imagename#.jpg。
我可以看到指定quality的选项,但我看不到任何东西可以将jpg保存为渐进的,甚至是优化的。我希望进步,因为它给人的印象是更快地加载到页面上。
有可能这样做吗?
发布于 2015-12-12 05:24:11
CFImage不支持立即编写进步的jpegs。据我所读,它在某种程度上是支持java。然而,这是一个很大的话题。因此,这绝不是一个完整的答案,只是一个起点。
Java
我对jpeg格式的了解是相当初级的,但是用java创建一个基本的、渐进的jpeg似乎非常简单:
一种看到它的行动的方法是使用Fiddler2模拟慢速连接。在“规则”>“性能”下,选择“模拟调制解调器速度”和“禁用缓存”。
示例:
// Create your CF image object
yourCFImage = imageNew("c:\path\input.jpg");
// ... resizing and other stuff
// Grab a JPEG writer. Validation omitted for brevity
// In real code, verify writer exists and progressives is supported first
// ie jpegWriters.hasNext() and imageParam.canWriteProgressive()
ImageIO = createObject("java", "javax.imageio.ImageIO");
jpegWriters = ImageIO.getImageWritersByFormatName("jpg");
writer = jpegWriters.next();
imageParam = writer.getDefaultWriteParam();
// Where to save new image on disk
destinationFile = createObject("java", "java.io.File").init( "c:\path\outut.jpg" );
destinationStream = ImageIO.createImageOutputStream( destinationFile );
// Parameters for desired image quality and interlacing
// NB: Compression type support varies (JPEG-LS, ...)
// Check availability with getCompressionType()
writer.setOutput( destinationStream );
imageParams = writer.getDefaultWriteParam();
imageParams.setCompressionMode( imageParams.MODE_EXPLICIT);
imageParams.setCompressionQuality( javacast("float", 0.80) ); // 80%
imageParams.setProgressiveMode( imageParams.MODE_DEFAULT );
// Write the new image to disk
buffImage = ImageGetBufferedImage( yourCFImage );
IIOImage = createObject("java", "javax.imageio.IIOImage");
imageToSave = IIOImage.init( buffImage, javacast("null", ""), javacast("null", ""));
writer.write( javacast("null", ""), imageToSave, imageParams );
// Cleanup object
destinationStream.flush();
destinationStream.close();
writer.dispose(); 外部工具
另一种选择是将cfexecute与杰佩特朗或ImageMagic等外部工具一起使用。它们都支持渐进式的jpegs和其他定制选项。例如,jpegtran通过扫描文件支持定制,这提供了大量的控制。(不幸的是,我还没有把我的头完全集中在那些……)先用默认设置试一试。这些可能对你的目的来说已经足够了。
<cfexecute name="C:\Program Files\ImageMagick-6.9.2-Q16\convert.exe"
arguments=" -interlace line -quality 85 c:\path\source.jpg c:\path\output.jpg"
...
>顺便说一下,我在研究时遇到了一个有趣的工具:JPEG扫描杀手。它并不用于创建进步的jpegs,但它确实有助于解释它们是如何生成的,以及扫描在流程中的位置。
https://stackoverflow.com/questions/34178759
复制相似问题