Нуждаете се от стратегия Coldfusion за воден знак на 11 GB jpeg файлове

Имам клиент, който иска да постави воден знак на изображенията си на IIS сървър, работещ с ColdFusion 10. Търся всякакъв начин да избегна обезобразяването на всички изображения с пакетна актуализация и да се налага да управлявам както версия с воден знак, така и една за оригинала.

Може ли водният знак да се направи в движение за изображения с висока разделителна способност с ColdFusion и да не се претоварва сървърът? Мисля си, че ако изключа папката от трафика на търсачката с robots.txt, това няма да е повече от трафика на посетителите и това може да е възможно. Гъвкаво решение като това би било идеално, което позволява на клиента да актуализира външния вид на водния знак без повторно групиране.

Как бихте се справили?


person Beth B    schedule 04.11.2013    source източник
comment
Само за пояснение, имате 11 GB съществуващи изображения И идват нови изображения?   -  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 MB). Въпреки това намалявам качеството, като използвам параметъра за качество, ако функцията 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