Du tar en stor risiko når du publiserer bildene og videoene dine på Internett, siden innholdet ditt enkelt kan kopieres til hundrevis av andre nettsteder. Det ville ikke være bra å finne bildet ditt for nyhetene, for eksempel som du jobbet hardt med, på et annet nettsted uten å angi kilden, det vil si nettstedet ditt, ikke sant? For å si det mildt, vil du bli opprørt, og hvis det ikke var et enkelt bilde for nyhetene, men et komplekst arbeid i Photoshop, er det å si at du er sint å si ingenting! Så hva kan du gjøre for å beskytte grafikken din?
For å beskytte opphavsretten til bilder eller videoer på Internett, brukes vanligvis et digitalt vannmerke eller digitalt vannmerke for enkelhets skyld. Fest et vannmerke til hvert opplastede bilde for å sikre det. CEH kan være logoen til nettstedet eller firmaet ditt, vakkert og estetisk plassert på de opplastede bildene.
La oss først lage en fil som inneholder de nødvendige innstillingene i form av konstanter - /config.php:
Define("WATERMARK_OVERLAY_IMAGE", "/develop/images/watermark.png"); // Sti til vannmerket ditt define("WATERMARK_OUTPUT_QUALITY", 100); // Kvaliteten på det mottatte bildet fra vannmerket. Husk at kvaliteten direkte påvirker filstørrelsen. define("UPLOADED_IMAGE_DESTINATION", "/develop/folder1/"); // Banen til plasseringen av de opprinnelige innlastede bildene definere("WATERMARK_IMAGE_DESTINATION", "/develop/folder2/"); // Sti til bilder med overlagt vannmerke
/*Функция добавления водяного знака на исходное изображение*/ function AddWaterMark($source_image_path, $result_image_path) { // Получаем ширину, высоту и тип исходного изображения list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); // Если по каким, то причинам неопределн тип, нам не стоит выполнять какие-либо действия с водяным знаком, по скольку это не картинка вовсе if ($source_image_type === NULL) { return false; } // Создаем, так называемый ресурс изображения из исходной картинки в зависимости от типа исходной картинки switch ($source_image_type) { case 1: // картинка *.gif $source_image = imagecreatefromgif($source_image_path); break; case 2: // картинка *.jpeg, *.jpg $source_image = imagecreatefromjpeg($source_image_path); break; case 3: // картинка *.png $source_image = imagecreatefrompng($source_image_path); break; default: return false; // Если картинка другого формата, или не картинка совсем, то опять же не стоит делать, что либо дальше с водяным знаком } // Создаем ресурс изображения для нашего водяного знака $watermark_image = imagecreatefrompng($_SERVER["DOCUMENT_ROOT"].WATERMARK_OVERLAY_IMAGE); // Получаем значения ширины и высоты $watermark_width = imagesx($watermark_image); $watermark_height = imagesy($watermark_image); // Наложение ЦВЗ с прозрачным фоном imagealphablending($source_image, true); imagesavealpha($source_image, true); // Самая важная функция - функция копирования и наложения нашего водяного знака на исходное изображение imagecopy($source_image, $watermark_image, $source_image_width - $watermark_width, $source_image_height - $watermark_height, 0, 0, $watermark_width, $watermark_height); // Создание и сохранение результирующего изображения с водяным знаком imagejpeg($source_image, $result_image_path, WATERMARK_OUTPUT_QUALITY); // Уничтожение всех временных ресурсов imagedestroy($source_image); imagedestroy($watermark_image); } /*Функция загрузки изображения*/ function ImageUpload($temp_path, $temp_name) { // Получаем параметры изображения list($temp_width, $temp_height, $temp_type) = getimagesize($temp_path); // Если тип определить не получилось, то возвращаем FALSE if ($temp_type === NULL) { return false; } // Если тип загружаемого файла не GIF, JPEG, PNG switch ($temp_type) { case 1: break; case 2: break; case 3: break; default: return false; } // Конечные пути для сохранения $upload_image_path = UPLOADED_IMAGE_DESTINATION . $temp_name; $watermark_image_path = WATERMARK_IMAGE_DESTINATION . preg_replace("/\\.[^\\.]+$/", ".jpg", $temp_name); // Загружаем исходное изображение move_uploaded_file($temp_path, $_SERVER["DOCUMENT_ROOT"].$upload_image_path); // Создаем копию изображения и добавляем водяной знак $result = AddWaterMark($_SERVER["DOCUMENT_ROOT"].$upload_image_path, $_SERVER["DOCUMENT_ROOT"].$watermark_image_path); // В случае, если все прошло упешно, возвращаем путь к файлу с ЦВЗ if ($result === false) { return false; } else { return array($upload_image_path, $watermark_image_path); } } ?>
La oss samle filene opprettet ovenfor i filen som utfører nedlastingen /upload.php
include("config.php"); include("functions.php"); $result = ImageUpload($_FILES["brukerfil"]["tmp_name"], $_FILES["brukerfil"]["navn"]); if ($result === usant)( ekko "Opplastning mislyktes!"; )
For eksempel, hvis bildet som ble lastet var:
Etter å ha lastet inn og påført et vannmerke, får du følgende bilde:
I dette eksemplet lagres det opplastede bildet i én mappe, og bildet som har blitt digitalt vannmerket i en annen, slik at du alltid har tilgang til originalbildene, men du bør selvfølgelig plassere bilder fra CEH på siden .
(178,4 KiB, 989 treff)
Hvis du vil legge til et vannmerke til et bilde uten å bry deg med bilderedigering eller legge det til mens du laster opp bilder til serveren, så er denne leksjonen for deg.
I denne opplæringen skal jeg vise deg hvordan du legger til et vannmerke til et bilde uten å faktisk endre det originale bildet. Først av alt trenger du et bilde som du vil bruke som vannmerke.
Deretter danner vi filoverskriften:
// denne linjen vil fortelle nettleseren at vi sender en jpg-bildehode ("content-type: image/jpeg");
Deretter danner vi et png-bilde og får dimensjonene:
// lag et png-vannmerke $watermark = imagecreatefrompng("watermark.png"); // få bredde og høyde $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark);
Vi vil gjøre det samme med originalbildet, men kun i jpg-format. Dette er vanlig for bilder som lastes opp via et skjema. Vi opptrer som følger:
// lag et jpg-bilde $image_path = "original.jpg"; $image = imagecreatefromjpeg($image_path); // få bildedimensjon $størrelse = getimagesize($bildebane);
Nå må vi plassere et vannmerke på bildet:
// sett vannmerket nederst til høyre. 5px padding $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5;
Deretter setter vi blandingsalternativene for begge bildene:
imagealphablending($image, true); imagealphablending($vannmerke, sant);
Til slutt lager vi et nytt bilde ved å bruke parametrene:
// lag en ny bildekopi($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($bilde);
Det er viktig å ta med seg:
// ledig minne imagedestroy($image); imagedestroy($vannmerke);
Du kan bruke Photoshop til å justere gjennomsiktigheten til vannmerket.
Det er alt med teori. Nå skal vi bruke kunnskapen vår i et reelt prosjekt. Alt dette må lagres i en fil. For eksempel kalt watermark.php
Header("innholdstype: bilde/jpeg"); // få bildenavn via GET $image = $_GET["image"]; // lag et vannmerke $watermark = imagecreatefrompng("watermark.png"); // få vannmerke høyde og bredde $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); // lag jpg fra originalbildet $image_path = "/bane/til/bilde/mappe/" . $image; $image = imagecreatefromjpeg($image_path); //hvis noe går galt if ($image === false) ( return false; ) $size = getimagesize($image_path); // sett et vannmerke på bildet $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5; imagealphablending($image, true); imagealphablending($vannmerke, sant); // lag en ny bildekopi($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($bilde); // ledig minne imagedestroy($image); imagedestroy($vannmerke);
Nå, for å vise et bilde som vil ha et vannmerke uten å endre originalbildet, bruk følgende kode.
Det er et stort antall bilder på Internett, som som regel lastes opp av nettstedseiere eller nettstedsbrukere. Avhengig av relevansen kan bildet migrere fra nettsted til nettsted. For ikke å snakke om opphavsrett, kanskje ikke alle nettstedeiere liker det faktum at bilder fra nettstedet hans kopieres til andre ressurser. Som et middel for å bekjempe banal kopiering av nettstedsbilder, ble det oppfunnet for å påføre vannmerker på bilder, noe som indikerer at bildet tilhører en bestemt ressurs. Dette kan spesielt gjelde for nettsteder som har et stort antall unike bilder.
La oss se på et kodeeksempel som demonstrerer påføringen av et vannmerke på opplastede bilder.
Så, hovedinnstillingene er inneholdt i form av konstanter, og de går først i koden:
// vannmerkebildebane define("WATERMARK_OVERLAY_IMAGE", "/lab/watermark/watermark.png"); // Komprimering, område 0-100 (påvirker bildekvalitet) define("WATERMARK_OUTPUT_QUALITY", 100); // kildebildemappen define("UPLOADED_IMAGE_DESTINATION", "/lab/watermark/upload/src/"); // mappe med behandlede bilder define("WATERMARK_IMAGE_DESTINATION", "/lab/watermark/upload/");
På siden vil vi legge ut et bildeopplastingsskjema som skal brukes til å sende bilder til serveren.
Skjemakode:
Vel, nå er det viktigste funksjonene for bildebehandling. Plasser disse funksjonene før du viser skjemaet på siden.
// функция загрузки изображения function ImageUpload($temp_path, $temp_name){ // получаем параметры изображения list($temp_width, $temp_height, $temp_type) = getimagesize($temp_path); // если тип определить не получилось, то возвращаем FALSE if ($temp_type === NULL) return false; // если тип загружаемого файла не GIF, JPEG, PNG switch ($temp_type){ case 1: break; case 2: break; case 3: break; default: return false; } // пути для сохранения $upload_image_path = UPLOADED_IMAGE_DESTINATION . $temp_name; $watermark_image_path = WATERMARK_IMAGE_DESTINATION . preg_replace("/\\.[^\\.]+$/", ".jpg", $temp_name); // загружаем исходное изображение move_uploaded_file($temp_path, $_SERVER["DOCUMENT_ROOT"].$upload_image_path); // создаем копию изображения и добавляем водяной знак $result = AddWaterMark($_SERVER["DOCUMENT_ROOT"].$upload_image_path, $_SERVER["DOCUMENT_ROOT"].$watermark_image_path); // возвращаем путь к файлу return ($result === false ? false: array($upload_image_path, $watermark_image_path)); } // функция добавления водяного знака function AddWaterMark($source_image_path, $result_image_path){ // получаем размеры и тип исходного изображения list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); // останавливаем выполнение если не удалось определить тип if ($source_image_type === NULL) return false; // создаем ресурс изображения из исходной картинки switch ($source_image_type) { case 1: // картинка *.gif $source_image = imagecreatefromgif($source_image_path); break; case 2: // картинка *.jpeg, *.jpg $source_image = imagecreatefromjpeg($source_image_path); break; case 3: // картинка *.png $source_image = imagecreatefrompng($source_image_path); break; default: return false; // в ином случае не делаем ничего } // создаем ресурс изображения для нашего водяного знака $watermark_image = imagecreatefrompng($_SERVER["DOCUMENT_ROOT"].WATERMARK_OVERLAY_IMAGE); // получаем размеры $watermark_width = imagesx($watermark_image); $watermark_height = imagesy($watermark_image); // параметры наложения с прозрачным фоном imagealphablending($source_image, true); imagesavealpha($source_image, true); // копирование и наложение знака на исходное изображение imagecopy($source_image, $watermark_image, $source_image_width - $watermark_width, $source_image_height - $watermark_height, 0, 0, $watermark_width, $watermark_height); // сохранение результата imagejpeg($source_image, $result_image_path, WATERMARK_OUTPUT_QUALITY); // очистка всех временных ресурсов imagedestroy($source_image); imagedestroy($watermark_image); } ?>
To nøkkelfunksjoner, ved hjelp av den ene lastes bildet opp til serveren, ved hjelp av den andre legges et vannmerke over hverandre. Kanskje er kommentarene til funksjonene beskrevet mer enn detaljert, og det ville være overflødig å skrive det samme her.
Hvis du vil legge til et vannmerke til et bilde uten å bry deg med bilderedigering eller legge det til mens du laster opp bilder til serveren, så er denne leksjonen for deg.
I denne opplæringen skal jeg vise deg hvordan du legger til et vannmerke til et bilde uten å faktisk endre det originale bildet. Først av alt trenger du et bilde som du vil bruke som vannmerke.
Deretter danner vi filoverskriften:
// denne linjen vil fortelle nettleseren at vi sender en jpg-bildehode ("content-type: image/jpeg");
Deretter danner vi et png-bilde og får dimensjonene:
// lag et png-vannmerke $watermark = imagecreatefrompng("watermark.png"); // få bredde og høyde $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark);
Vi vil gjøre det samme med originalbildet, men kun i jpg-format. Dette er vanlig for bilder som lastes opp via et skjema. Vi opptrer som følger:
// lag et jpg-bilde $image_path = "original.jpg"; $image = imagecreatefromjpeg($image_path); // få bildedimensjon $størrelse = getimagesize($bildebane);
Nå må vi plassere et vannmerke på bildet:
// sett vannmerket nederst til høyre. 5px padding $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5;
Deretter setter vi blandingsalternativene for begge bildene:
imagealphablending($image, true); imagealphablending($vannmerke, sant);
Til slutt lager vi et nytt bilde ved å bruke parametrene:
// lag en ny bildekopi($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($bilde);
Det er viktig å ta med seg:
// ledig minne imagedestroy($image); imagedestroy($vannmerke);
Du kan bruke Photoshop til å justere gjennomsiktigheten til vannmerket.
Det er alt med teori. Nå skal vi bruke kunnskapen vår i et reelt prosjekt. Alt dette må lagres i en fil. For eksempel kalt watermark.php
Header("innholdstype: bilde/jpeg"); // få bildenavn via GET $image = $_GET["image"]; // lag et vannmerke $watermark = imagecreatefrompng("watermark.png"); // få vannmerke høyde og bredde $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); // lag jpg fra originalbildet $image_path = "/bane/til/bilde/mappe/" . $image; $image = imagecreatefromjpeg($image_path); //hvis noe går galt if ($image === false) ( return false; ) $size = getimagesize($image_path); // sett et vannmerke på bildet $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5; imagealphablending($image, true); imagealphablending($vannmerke, sant); // lag en ny bildekopi($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($bilde); // ledig minne imagedestroy($image); imagedestroy($vannmerke);
Nå, for å vise et bilde som vil ha et vannmerke uten å endre originalbildet, bruk følgende kode.
I noen tilfeller er det å legge til et vannmerke til bildene du plasserer på nettstedet ditt den eneste måten å beskytte dem mot tyveri. I tillegg sier de at slike vannmerker tiltrekker seg ekstra trafikk.
Det er mange måter å vannmerke et bilde på ved hjelp av PHP, men klienten min trengte en applikasjonsmetode som ville tillate deg å endre vannmerket til et nytt når som helst.
Som det viser seg, finnes det en slik løsning.
Dette brukes vanligvis av folk som utvikler nettsteder med stort sett grafisk innhold.
Velge en vannmerkemetode
Problemet med å implementere all denne skam ligger i valget av hvordan man bruker et vannmerke mellom ytelse og fleksibilitet. En ideell løsning som passer alle finnes rett og slett ikke. Derfor er det mange implementeringer.
I mitt tilfelle forbeholder kunden seg retten til å rebrande når som helst og i stedet for "Horn og hover" skrive "Høver og horn". Den valgte metoden for vannmerking må også tåle dette.
Essensen av vannmerketeknologien beskrevet her er å legge til det samme merket hver gang et bilde lastes inn. Ja, denne metoden har en rekke begrensninger som kan påvirke ytelsen betydelig, men som de sier, kunden har alltid rett, og derfor hvis de. Siden oppgaven krever dynamisk påføring av et vannmerke, er dette akkurat det du må gjøre.
Hvis noen har en enklere måte, så er du velkommen i kommentarfeltet. Det skal bli interessant å lytte.
Før jeg tar med litt kode, vil jeg gjerne beskrive fordelene, samt gi et fungerende eksempel.
Fordeler:
- du kan endre vannmerket minst 500 ganger om dagen;
- kan distribueres i et hvilket som helst CMS (det er ikke knyttet til det på noen måte).
Minuser:
- avhenger av ytelsen til hostingen (hvis du har mange bilder eller de har høy oppløsning, kan dette legge en betydelig belastning på serveren);
- et nysgjerrig sinn kan fortsatt fjerne vannmerket ditt.
Konklusjoner: for å få plass til et lite antall bilder med vannmerker, er denne metoden den beste, men hvis du skal åpne et bildegalleri, vil det være mer riktig å se etter noe mindre høybelastning.
Eksempel
Implementere et vannmerke med PHP
Som lovet, for dette trenger du ikke ha noen spesiell kunnskap, du trenger:
- fil, som er i arkivet, og plasser den i rotkatalogen på nettstedet ditt;
- vi plasserer bildet som vil fungere som et vannmerke i rotkatalogen til nettstedet og navngir det (i mitt tilfelle er det et hvitt penselstrøk, så det kan ikke skjelnes mot bakgrunnen til nettleseren din når du følger lenken). Bildet må være nøyaktig PNG , siden det har et gjennomsiktig lag. Hvis du vil bruke GIF, må du redigere filen image.php;
- på stedet der du vil vise bildet med et vannmerke, legg inn koden:
Det er alt. Alle er fornøyde, både du og kunden.