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.
Nettstedseiere (fora, oppslagstavler osv.) står ofte overfor problemet med vannmerking av alle store nettstedsbilder.
Selvfølgelig kan dette problemet løses ved å manuelt lage et vannmerke på hvert bilde, men for det første tar det mye tid, og for det andre blir det nødvendig å lagre to versjoner av bildet, med og uten vannmerke.
Løsningen på dette problemet kan være å dynamisk bruke et vannmerke på bildet før det overføres til den besøkende på nettstedet.
Det er en løsning på dette problemet på Internett i form av to filer, hvis innhold er gitt nedenfor.
Kildekoden til ".htaccess"-filen
DirectoryIndex index.php RewriteEngine On RewriteCond %(REQUEST_FILENAME) -f RewriteRule ^(.*)$ /watermark/_watermark.php
Kildekoden til filen "_watermark.php"
250) && ($info_o > 250)) ( // For bilder uten alfakanal // Den siste parameteren i funksjonen er graden av opasitet til vannmerket imageCopyMerge($out, $watermark, ($info_o-$info_w)/ 2, ($info_o -$info_w)/2, 0, 0, $info_w, $info_w, 25); // For bilder med en alfakanal // I dette tilfellet styres gjennomsiktighet av alfakanalen til selve bildet // imageCopy($out, $watermark, ($info_o-$info_w)/2, ($info_o-$info_w)/2, 0, 0, $info_w, $info_w); ) bryter ($info_o) (case 1 : imageGIF($out); break; case 2: imageJPEG($out); break; case 3: imagePNG($out); break; default: return false; ) imageDestroy($out); imageDestroy($original); imageDestroy($vannmerke); return true; ) ?>
Løsningen koker ned til følgende, ".htaccess"-filen plasseres i katalogen med bildefilene. I tillegg til den opprettes mappen "vannmerke" på serveren, som inneholder skriptfilen "_watermark.php" og selve vannmerkefilen "watermark.png".
Samtidig, sammenlignet med originalversjonen som ble funnet på Internett, gjorde jeg mindre endringer i begge tekstfilene.
I ".htaccess"-filen er utvidelsen "jpeg" lagt til det regulære uttrykket for bildefilsøk, som også er vanlig.
"_watermark.php"-skriptet har blitt redesignet for å plassere vannmerket i midten av bildet (dette var påkrevd av den spesifikke oppgaven som ble løst) og muligheten til å justere gjennomsiktigheten til det opprettede vannmerket er lagt til (kommentarer i skriptet kroppen vil hjelpe deg med å angi denne parameteren selv).
Du bør også være oppmerksom på det faktum at å legge "vannmerke"-mappen i bildemappen, som originalkildene anbefaler, ikke vil oppnå ønsket resultat, fordi. i dette tilfellet må vi ha sin egen ".htaccess"-fil og "vannmerke"-mappe i hver mappe. Dette skyldes det faktum at ".htaccess"-filen inneholder absolutte stier fra nettstedets rotkatalog til "_watermark.php"-filen. Dermed har vi en egen "vannmerke" undermappe i hver mappe med bilder, hvis vi trenger å endre vannmerket (eller skriptet som overlegger det på bildet), må vi gjøre endringer i alle mapper.
For å unngå dette problemet anbefaler jeg å opprette en "vannmerke"-mappe i nettstedets rotkatalog, og plassere en ".htaccess"-fil i bildekatalogene uten å måtte endre den hver gang. I dette tilfellet, for å endre vannmerket eller skriptet, må vi bare gjøre endringer på ett sted på nettstedet. I dette tilfellet kan du lage forskjellige vannmerker for forskjellige mapper med bilder ved å referere til forskjellige skript fra forskjellige ".htaccess"-filer, for eksempel "_watermark-1.php", "_watermark-2.php", etc.
Så oppsummert kan vi si at for å bruke vannmerker på alle bilder av nettstedet, må du laste ned arkivet vedlagt nedenfor, pakke det ut, plasser "vannmerke"-mappen i rotkatalogen til nettstedet, erstatte vannmerket fil "watermark.png" i den med ditt eget, og plasser ".htaccess"-filen i de katalogene på nettstedet, bilder fra som skal merkes med et vannmerke.
Du kan laste ned et arkiv som inneholder alle nødvendige filer fra denne