создание миниатюр с использованием тега CF8 cfimage - большой размер файла, вызванный метаданными изображения - PullRequest
3 голосов
/ 02 апреля 2011

Я создаю небольшое веб-приложение, которое будет изменять размеры изображений до различных размеров в пикселях после их загрузки.

Я пытаюсь создать миниатюру размером 150px X 100px из изображения jpg размером 3 МБ, но не могу получить размер файла меньше 68 КБ (я ожидаю, что будет создан файл размером от 4 до 15 КБ в зависимости от типа сжатия и т. Д.) *

Я использовал метод action = "resize" тега, а также функции ImageResize () и imageScaleToFit (), но все эти методы сохраняют метаданные exif & IPTC нетронутыми (я предполагаю, что это то, что сохраняет файл миниатюр, такой же большой, как и он).

Если я использую изображение без метаданных, оно изменяет размер миниатюры до небольшого размера файла, как и ожидалось.

Можно ли в любом случае убрать метаданные exif & IPTC с изображения, чтобы уменьшить размер миниатюр, используя любую из встроенных в CF8 функций изображения?

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

вы можете использовать библиотеку Java Sanselan для удаления метаданных 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, используя iptc.JpegIptcRewriter и метод удаления IPTC .Используя функции CF ImageGetEXIFMetaData и ImageGetIPTCMetadata, вы можете проверить, что все было удалено.

Теперь я не уверен, что это действительно уменьшит размер файла, дайте мне знать: -)

1 голос
/ 03 апреля 2011

Вы можете создать новое изображение того же размера, что и миниатюра, и использовать ImagePaste для вставки миниатюры. ColdFusion не сохраняет данные EXIF ​​с помощью операции вставки.

0 голосов
/ 08 апреля 2011

Проверьте это: используйте

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, чтобы уменьшить размер файла.

0 голосов
/ 02 апреля 2011

Если вы хотите, вы можете использовать инструмент командной строки, связанный с постом, который @Ciaran Archer связал выше, а затем написать команду bash (* nix / Mac) или команду bat (Windows), которая запускает команду а затем используйте CFExecute для запуска этой команды. Я никогда прежде не работал с CFImage или с метаданными изображений, поэтому я не мог дать вам правильный код, но то, что я сказал, вероятно, будет иметь лучшую производительность, потому что вы экспортируете команды в файловую систему, что сделано (работа с файлами) .

...