Нужна стратегия Coldfusion для нанесения водяных знаков на 11 Гб jpeg

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

Можно ли наносить водяные знаки на лету для изображений с высоким разрешением с помощью ColdFusion и не перегружать сервер? Я вот думаю, если исключить папку из поискового трафика с помощью robots.txt то это будет не больше трафика посетителей и такое возможно. Подобное гибкое решение было бы идеальным, позволяя клиенту обновлять внешний вид водяного знака без повторной пакетной обработки.

Как бы вы справились с этим?


person Beth B    schedule 04.11.2013    source источник
comment
Просто чтобы уточнить, у вас есть 11 ГБ существующих изображений И новые изображения?   -  person James A Mohler    schedule 04.11.2013


Ответы (6)


На самом деле это описано в документации Adobe ColdFusion.

Во-первых, это Управление изображениями ColdFusion — в нижней части страницы. представляет собой раздел Создание водяных знаков (каждый из пунктов более подробно обсуждается на этой странице)

Водяной знак — это полупрозрачное изображение, наложенное на другое изображение. Одним из способов использования водяного знака является защита изображений, защищенных авторским правом. Чтобы создать водяной знак в ColdFusion, вы используете функцию ImageSetDrawingTransparency с функцией ImagePaste. Вы можете создать изображение водяного знака одним из трех способов:

  • Создайте водяной знак из существующего файла изображения. Например, вы можете использовать логотип компании в качестве водяного знака.
  • Создайте текстовое изображение в ColdFusion и примените изображение в качестве водяного знака. Например, вы можете создать текстовую строку, такую ​​как Copyright или PROOF, и применить ее ко всем изображениям в фотогалерее.
  • Создайте изображение чертежа в ColdFusion и используйте его в качестве водяного знака. Например, вы можете использовать функции рисования, чтобы создать зеленую галочку и применить ее к утвержденным изображениям.

Затем следует Запись изображений в браузер — в котором обсуждается, как записывать изображения непосредственно в браузер, не записывая их на диск.

Используйте действие writeToBrowser тега cfimage, чтобы отображать изображения непосредственно в браузере, не записывая их в файлы. Этот метод полезен для проверки внешнего вида образа ColdFusion.

И у них даже есть создание галереи изображений с водяными знаками в разделе Примеры приложений, в которых используются образы ColdFusion — примерно на полпути вниз по этой странице.

Эти примеры должны вас заинтересовать.

person Miguel-F    schedule 04.11.2013

Об этом хорошо рассказывается в серии блогов Бена Наделя: http://www.bennadel.com/blog/775-Learning-ColdFusion-8-CFImage-Part-III-Watermarks-And-Transparency.htm

Это зависит от того, насколько велики изображения на самом деле, от нагрузки на сервер и от того, насколько мясистый ваш сервер.

Что я делаю, так это визуализирую изображение с помощью вызова ajax (т.е. ставлю счетчик на место до его загрузки, а затем заменяю HTML с визуализированным/помеченным водяным знаком изображением).

Вы также можете легко иметь кеш-папку с изображениями, уже отмеченными водяными знаками, а затем скрипт выполняет fileExists() в кеш-папке и обслуживает ее, если она уже существует.

person Neokoenig    schedule 04.11.2013

Хорошим решением было бы создать новую папку для изображений с водяными знаками (например, /images/watermarked/), а затем добавить правило перезаписи веб-сервера, которое проверяет, существует ли файл в папке, если его нет. существует в папке, то правило перенаправления запускает запрос через CF и позволяет создать изображение с водяным знаком и сохранить его в папке для использования в будущем.

Для этого вы можете использовать модуль перезаписи IIS, посмотрите по этой ссылке похожее решение: Если файл существует, вернуть файл, если файл не выходит, перезаписать

Преимущество этого решения в том, что изображения обслуживаются через веб-сервер и в большинстве случаев не требуется использование CF. Затем, если у вас есть новый водяной знак, вы просто очистите папку /images/watermarked/, и она начнет генерировать новые по мере поступления запросов.

Если у вас есть более сложные потребности, вы можете проверить mod_xsendfile (модуль Apache или модуль IIS от Helicon).

person Pete Freitag    schedule 04.11.2013

Этот ответ (Как добавить водяные знаки в изображения через командную строку — надеюсь, с помощью Irfanview) выглядит как бизнес, просто отдавая временный файл, созданный на лету с помощью этого метода. (Он не использует IrfanView). Я не знаком с ColdFusion, так что решать вам.

person GKFX    schedule 04.11.2013

Не имеет прямого отношения к вашему вопросу, но если ваш клиент не хочет, чтобы изображения без водяных знаков были напрямую доступны через Интернет, я думаю, что простого исключения папки из поисковых систем с помощью robots.txt будет недостаточно, поскольку вы фактически указываете любой, кто взглянет на robots.txt в эту папку. Вы должны поместить исходные изображения в каталог, недоступный для Интернета.

person Ernesto Rodríguez Ageitos    schedule 14.11.2013

Это простая логика, которую я использовал для обработки изображений, находящихся на сервере 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>

person Yoosaf Abdulla    schedule 20.03.2014