使用CF8 cfimage标记生成缩略图 - 由图像元数据导致的大型文件大小

时间:2011-04-02 01:15:01

标签: coldfusion thumbnails coldfusion-8 iptc

我正在构建一个小型网络应用,可以在上传图像后将图片大小调整为不同的像素尺寸。

我正在尝试从3mb jpg图像创建150px X 100px缩略图,但我无法获得小于68kb的文件大小(我希望在4kb和15kb文件之间生成一个文件,具体取决于压缩类型等)。 / p>

我使用了标签&的action =“resize”方法。还使用了ImageResize()& imageScaleToFit()函数,但所有这些方法保持exif& IPTC元数据完好无损(我假设这是保持缩略图文件大小的原因)。

如果我使用没有任何元数据的图像,它会按预期将缩略图调整为小文件大小。

无论如何我可以去除exif&来自图像的IPTC元数据可以使用任何CF8的内置图像功能来缩小缩略图大小?

4 个答案:

答案 0 :(得分:2)

您可以使用Sanselan Java库删除EXIF和IPTC元数据。以下是使用此库中 removeExifMetadata 的代码示例:

<cfscript>
// setup and init the Sanselan library
SanselanPath = arrayNew(1);
arrayAppend(SanselanPath, expandPath("sanselan\sanselan-0.97-incubator.jar"));
javaloader = createObject("component", "javaloader.JavaLoader").init(SanselanPath);

// setup your source and destination image
pathToInFile = ExpandPath("myImage.jpg");
pathToOutFile = ExpandPath("MyImagewoEXIF.jpg");
inFile = javaloader.create("java.io.FileInputStream").init(pathToInFile);
outFile = javaloader.create("java.io.FileOutputStream").init(pathToOutFile);

// create the exifRewriter 
exifRewriter = javaloader.create("org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter").init();

// call the method removeExifMetadata
exifRewriter.removeExifMetadata(inFile,outFile);
outFile.close();
</cfscript>

您可以使用 iptc.JpegIptcRewriter removeIPTC 方法删除IPTC元数据。您可以使用CF函数ImageGetEXIFMetaData和ImageGetIPTCMetadata验证所有内容已被删除。

现在我不确定它是否会真正减小文件大小,请告诉我: - )

答案 1 :(得分:1)

您可以创建与缩略图尺寸相同的新图像,并使用ImagePaste粘贴缩略图。 ColdFusion不会通过粘贴操作保留EXIF数据。

答案 2 :(得分:0)

如果您愿意,可以使用在@Ciaran Archer上面链接的帖子中链接的命令行工具,然后编写运行命令的bash命令(* nix / Mac)或bat命令(Windows)然后使用CFExecute运行该命令。我以前从未真正使用CFImage或图像元数据,所以我无法给你正确的代码,但我所说的可能会有最好的性能,因为你要将命令导出到文件系统(使用文件)

答案 3 :(得分:0)

检查一下: 使用

ImageWrite(imageObject,destination,0.9,true) returns small sized image (90% quality, overwrite="true")

而不是

ImageWrite(imageObject,destination,true,0.9) returns big sized image (quality="true" which is 1, overwrite="0.9" which is true)

从0到1选择质量比以减小文件大小。