Нужна стратегия Coldfusion для нанесения водяных знаков на 11 ГБ JPEG
У меня есть клиент, который хочет нанести водяные знаки на свои изображения на сервере IIS, работающем под управлением ColdFusion 10. Я ищу любой способ избежать искажения всех изображений с помощью пакетного обновления и необходимости управлять как версией с водяным знаком, так и версией с оригиналом.
Можно ли делать водяные знаки на лету для изображений с высоким разрешением с помощью ColdFusion и не перегружать сервер? Я думаю, что если я исключу папку из трафика поисковой системы с помощью robots.txt, то это будет не больше, чем трафик посетителей, и это может быть возможно. Такое гибкое решение было бы идеальным, позволяя клиенту обновлять внешний вид водяного знака без повторной дозировки.
Как бы вы справились с этим?
6 ответов
На самом деле это описано в документации по Adobe ColdFusion.
Во-первых, это манипулирование изображениями ColdFusion - в нижней части страницы находится раздел " Создание водяных знаков" (каждая из них более подробно обсуждается на этой странице).
Водяной знак - это полупрозрачное изображение, которое накладывается на другое изображение. Одно из применений водяного знака - защита защищенных авторским правом изображений. Чтобы создать водяной знак в ColdFusion, вы используете функцию ImageSetDrawingTransparency вместе с функцией ImagePaste. Вы можете создать изображение водяного знака одним из трех способов:
- Создайте водяной знак из существующего файла изображения. Например, вы можете использовать логотип компании в качестве водяного знака.
- Создайте текстовое изображение в ColdFusion и примените изображение в качестве водяного знака. Например, вы можете создать текстовую строку, например, Copyright или PROOF, и применить ее ко всем изображениям в фотогалерее.
- Создайте рисунок в ColdFusion и используйте его в качестве водяного знака. Например, вы можете использовать функции рисования, чтобы создать зеленую галочку и применить ее к утвержденным изображениям.
Затем есть Запись изображений в браузер - здесь обсуждается, как записывать изображения непосредственно в браузер, не записывая их на диск.
Используйте действие writeToBrowser тега cfimage для отображения изображений непосредственно в браузере без записи их в файлы. Этот метод полезен для проверки внешнего вида изображения ColdFusion.
И у них даже есть Генерация галереи изображений с водяными знаками в разделе Примеры приложений, которые используют изображения ColdFusion - примерно на полпути вниз по этой странице.
Эти примеры должны помочь вам.
Хорошим решением было бы создать новую папку для изображений с водяными знаками (например, /images/watermarked/), а затем добавить правило перезаписи веб-сервера, которое проверяет, существует ли файл в папке, если он не существует. существует в папке, тогда правило перенаправления пропускает запрос через CF и позволяет генерировать изображение с водяным знаком и сохранять его в папке для будущего использования.
Для этого можно использовать модуль перезаписи IIS. Для получения аналогичного решения перейдите по этой ссылке: если файл существует, вернуть файл, если файл не завершится, перезаписать
Преимущество этого решения заключается в том, что изображения передаются через веб-сервер и в большинстве случаев избегают использования CF. Затем, если у вас есть новый водяной знак, вы просто удаляете папку / images / watermarked /, и она начинает генерировать новые по мере поступления запросов.
Если у вас есть более сложные потребности, вы можете проверить mod_xsendfile (модуль Apache или модуль IIS от Helicon).
Серия блогов Бена Наделя хорошо освещает это: http://www.bennadel.com/blog/775-Learning-ColdFusion-8-CFImage-Part-III-Watermarks-And-Transparency.htm
Это зависит от того, насколько велики изображения в зависимости от нагрузки на сервер и насколько объемен ваш сервер.
То, что я делаю, это рендеринг изображения с помощью ajax-вызова (т. Е. Установите спиннер на место, пока он не загрузится, а затем вытолкните HTML-код с изображением / с водяным знаком).
Вы также можете легко иметь кеш-папку с уже имеющими водяные знаки изображениями, а затем скрипт выполняет функцию fileExists() для кеш-папки и выполняет ее, если она уже существует.
Не имеет прямого отношения к вашему вопросу, но если ваш клиент не хочет, чтобы изображения без водяных знаков были напрямую доступны через Интернет, я думаю, что простого исключения папки из поисковых систем с robots.txt было бы недостаточно, поскольку вы эффективно указываете любой, кто заглядывает в robots.txt в эту папку. Вы должны поместить свои оригинальные изображения в недоступный для веб-каталога каталог.
Это простая логика, которую я использовал для обработки изображений, находящихся на сервере IIS, который был смонтирован на моем диске Linux-сервера. Из последних я делаю водяные знаки на каждом изображении и разделяю их на группы, каждая группа которых представлена папкой. Я обрабатываю около 800-1000 изображений в день действительно высокого качества (минимальный размер файла 10 МБ). Однако я уменьшаю качество, используя параметр качества, если функция ImgaWrite в CF10.
<cfloop array="myArrayofStructs" index="carr">
<cfif len(carr.tempPath) GT 0>
<cfif !directoryexists(Dirdestn&carr.tempPath&"/")>
<cfset DirectoryCreate(Dirdestn&carr.tempPath&"/")>
<cfelse>
<!---Do Nothing--->
</cfif>
<cfset destn=Dirdestn&carr.tempPath&"/"&carr.photoid&".jpg">
<cfset source=Expandpath("/imagebank/"&carr.filename)>
<cfif fileexists(Expandpath("/imagebank/"&carr.filename)) AND IsImageFile(Expandpath("/imagebank/"&carr.filename))>
<cfif !fileexists(destn)>
<cfimage source="#source#" name="image_1">
<cfset imagepaste(image_1, watermark, 500, 0)> <cfset imageWrite(image_1, destn,0)>
</cfif>
</cfif>
Этот ответ (" Как добавить водяные знаки на изображения через командную строку - надеюсь, используя Irfanview") выглядит как бизнес, просто обслуживающий временный файл, сгенерированный на лету с помощью этого метода. (Он не использует IrfanView). Я не знаком с ColdFusion, так что решать вам.