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

Coldfusion 使用CF8 cfimage标记生成缩略图-图像元数据导致的大文件大小,coldfusion,thumbnails,coldfusion-8,iptc,Coldfusion,Thumbnails,Coldfusion 8,Iptc,我正在构建一个小的web应用程序,在上传图像后,它会将图像调整为不同的像素尺寸 我正在尝试从3mb jpg图像创建150px X 100px的缩略图,但无法获得小于68kb的文件大小(我希望生成一个4kb和15kb之间的文件,具体取决于压缩类型等) 我使用了标签的action=“resize”方法,也使用了imagesize()和imageScaleToFit()函数,但所有这些方法都保持了exif和IPTC元数据的完整性(我假设这就是保持缩略图文件尽可能大的原因) 如果我使用没有任何元数据的图

我正在构建一个小的web应用程序,在上传图像后,它会将图像调整为不同的像素尺寸

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

我使用了标签的action=“resize”方法,也使用了imagesize()和imageScaleToFit()函数,但所有这些方法都保持了exif和IPTC元数据的完整性(我假设这就是保持缩略图文件尽可能大的原因)

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


我是否可以使用CF8的任何内置图像功能从图像中剥离exif&IPTC元数据以减小缩略图大小?

如果您愿意,您可以使用@Ciaran Archer上面链接的帖子中链接的命令行工具,然后编写bash命令(*nix/Mac)或bat命令(Windows)运行该命令,然后使用CFExecute运行该命令。我以前从未真正使用过CFImage或image metadata,因此我无法为您提供正确的代码,但我所说的可能会有最好的性能,因为您将命令导出到文件系统是为了(使用文件)而做的.

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

您可以使用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>

//设置并初始化Sanselan库
SanselanPath=arrayNew(1);
arrayAppend(SanselanPath,expandPath(“sanselan\sanselan-0.97-incubator.jar”);
javaloader=createObject(“组件”、“javaloader.javaloader”).init(SanselanPath);
//设置源映像和目标映像
pathToInFile=ExpandPath(“myImage.jpg”);
pathToOutFile=ExpandPath(“MyImagewoEXIF.jpg”);
infie=javaloader.create(“java.io.FileInputStream”).init(pathToInFile);
outFile=javaloader.create(“java.io.FileOutputStream”).init(pathToOutFile);
//创建exifRewriter
exifRewriter=javaloader.create(“org.apache.sanselan.formats.jpeg.exifRewrite.exifRewriter”).init();
//调用removeExifMetadata方法
exifRewriter.removeExifMetadata(填充、输出文件);
outFile.close();
您也可以使用IPTC.JpegIptcRewriter和removeIPTC方法删除IPTC元数据。您可以使用CF函数ImageGetEXIFMetaData和ImageGetIPTCMetadata验证是否已删除所有内容

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

请查看以下内容: 使用

而不是

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

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

这有用吗?抱歉,在我的问题中没有澄清-此应用将在共享主机上托管,因此我无权运行任何系统cmds或标记。我在搜索答案时遇到过此方法-问题是当我尝试此方法时,无论我是否将带有元数据的图像设置为image1,它仍保留元数据(基本图像)或图像2(顶部粘贴的图像)。不确定您的意思是什么?imageWrite()函数只接受3个参数SimageWrite(名称、目标、质量、覆盖),所以像我上面提到的那样使用它。噢,在CF8中没有最后一个(覆盖)参数。但无论如何,您可以像imageWrite(名称、目标、0.9)一样设置图像质量
ImageWrite(imageObject,destination,true,0.9) returns big sized image (quality="true" which is 1, overwrite="0.9" which is true)