Watermarking duke përdorur PHP. Shtimi i një filigrani dinamik në një imazh duke përdorur PHP Zgjedhja e një metode aplikimi të filigranit

Në disa raste, shtimi i filigranëve në imazhet që postoni në faqen tuaj është mënyra e vetme për t'i mbrojtur ato disi nga vjedhja. Për më tepër, ata thonë se filigranë të tillë tërheqin trafik shtesë.

Ka shumë mënyra për të krijuar një filigran në një imazh duke përdorur PHP, por klienti im kishte nevojë për një metodë aplikimi që do t'i lejonte atij të ndryshonte filigranin në një të ri në çdo kohë.

Siç rezulton, ekziston një zgjidhje e tillë.

Kjo zakonisht përdoret nga njerëz që zhvillojnë faqe interneti me përmbajtje kryesisht grafike.

Zgjedhja e një metode filigrani

Problemi me zbatimin e gjithë kësaj rrëmujë është zgjedhja e mënyrës se si të aplikohet filigrani midis performancës dhe fleksibilitetit. Thjesht nuk ka zgjidhje ideale që do t'i përshtatet të gjithëve. Kjo është arsyeja pse ka shumë zbatime.

Në rastin tim, klienti rezervon të drejtën për të riemërtuar në çdo kohë dhe në vend të kësaj "Brirët dhe thundrat" shkruaj "Tundet dhe brirët". Metoda e vulosjes që zgjidhni duhet ta tolerojë këtë gjithashtu.

Thelbi i teknologjisë së filigranit të përshkruar këtu është të shtohet pikërisht kjo shenjë sa herë që ngarkohet një imazh. Po, kjo metodë mbart një sërë kufizimesh që mund të ndikojnë ndjeshëm në performancën, por siç thonë ata, klienti ka gjithmonë të drejtë dhe prandaj nëse ato. detyra kërkon aplikimin dinamik të një filigrani, atëherë kjo është pikërisht ajo që duhet bërë.

Nëse dikush ka një mënyrë më të lehtë, atëherë jeni të mirëpritur të komentoni. Do të jetë interesante të dëgjoni.

Para se të paraqes disa kode, do të doja të përshkruaj avantazhet, si dhe të jap një shembull pune.

Të mirat:

  • ju mund të ndryshoni filigranin të paktën 500 herë në ditë;
  • mund të vendoset në çdo CMS (nuk është i lidhur me të në asnjë mënyrë).

Minuset:

  • varet nga performanca e pritjes (nëse keni shumë imazhe ose ato janë me rezolucion të lartë, kjo mund të sjellë një ngarkesë të konsiderueshme në server);
  • një mendje kureshtare do të jetë ende në gjendje të heqë filigranin tuaj.

Konkluzione: për postimin e një numri të vogël imazhesh me filigranë, kjo metodë është e përsosur, por nëse do të hapni një galeri fotografish, atëherë do të ishte më mirë të kërkoni diçka më pak të ngarkuar.

Shembull

Zbatimi i një filigrani duke përdorur PHP

Siç u premtua, nuk keni nevojë të keni ndonjë njohuri të veçantë për këtë, ju duhet:

  1. skedar, i cili është në arkiv dhe vendoseni në direktorinë rrënjë të faqes tuaj;
  2. Ne vendosim imazhin që do të veprojë si filigran në direktorinë rrënjësore të faqes dhe e emërtojmë atë (në rastin tim është një goditje e bardhë brushë, kështu që lidhja mund të mos jetë e dukshme në sfondin e shfletuesit tuaj). Imazhi duhet të jetë PNG, pasi ka një shtresë transparente. Nëse dëshironi të përdorni GIF, duhet të redaktoni skedarin imazh.php;
  3. në vendin ku dëshironi të shfaqni imazhin me filigran, vendosni kodin:

Kjo eshte e gjitha. Të gjithë janë të lumtur, si ju ashtu edhe klienti.

Nëse dëshironi të shtoni një filigran në një foto pa u shqetësuar me redaktuesit e imazheve ose duke e shtuar atë gjatë ngarkimit të fotove në server, atëherë ky tutorial është për ju.

Në këtë tutorial do t'ju tregoj se si të shtoni një filigran në një imazh në fluturim pa ndryshuar në fakt imazhin origjinal. Para së gjithash, do t'ju duhet një imazh për t'u përdorur si filigran.

Pastaj formojmë kokën e skedarit:

// kjo linjë do t'i tregojë shfletuesit se po kalojmë një kokë të imazhit jpg ("content-type: image/jpeg");

Pastaj gjenerojmë një imazh png dhe marrim dimensionet e tij:

// krijoni një filigran në formatin png $watermark = imagecreatefrompng("watermark.png"); // merrni gjerësinë dhe lartësinë $watermark_width = imagesx($watermark); $watermark_height = imagesy($ujëra);

Ne do të bëjmë të njëjtën gjë me imazhin origjinal, por vetëm në formatin jpg. Kjo është e zakonshme për fotot që ngarkohen përmes një formulari. Ne vazhdojmë si më poshtë:

// krijimi i një imazhi jpg $image_path = "origjinal.jpg"; $image = imagecreatefromjpeg($image_path); // merrni madhësinë e imazhit $size = getimagesize($image_path);

Tani duhet të vendosim një filigran në imazh:

// vendosni një filigran në fund djathtas. Indenti 5px $dest_x = $madhësia - $gjerësia_ujore - 5; $dest_y = $madhësia - $ujore_lartësia - 5;

Më pas, le të vendosim opsionet e përzierjes për të dy imazhet:

Imagealphablending ($image, e vërtetë); imagealphablending ($ ujëra, e vërtetë);

Më në fund ne krijojmë një imazh të ri duke përdorur parametrat:

// krijoni një imazh të ri imazhi ($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg ($image);

Është e rëndësishme të pastroni veten:

// liro memorie imagedestroy($image); imagedestroy ($ ujëra);

Mund të përdorni Photoshop për të rregulluar transparencën e filigranit.

Kjo është e gjitha me teorinë. Tani le të zbatojmë njohuritë tona në një projekt real. E gjithë kjo duhet të ruhet në një skedar. Për shembull, i quajtur filigran.php

Header ("lloji i përmbajtjes: imazh/jpeg"); // merrni emrin e imazhit nëpërmjet GET $image = $_GET["imazh"]; // krijoni një filigran $watermark = imagecreatefrompng("watermark.png"); // merrni lartësinë dhe gjerësinë e filigranit $width_width = imagesx($watermark); $watermark_height = imagesy($ujëra); // krijoni një jpg nga imazhi origjinal $image_path = "/path/to/image/folder/" . $image; $image = imagecreatefromjpeg($image_path); //nëse diçka shkon keq nëse ($image === false) ( return false; ) $size = getimagesize($image_path); // vendosni një filigran në imazhin $dest_x = $size - $watermark_width - 5; $dest_y = $madhësia - $ujore_lartësia - 5; imagealphablending ($image, e vërtetë); imagealphablending ($ ujëra, e vërtetë); // krijoni një imazh të ri imazhi ($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg ($image); // liro memorie imagedestroy($image); imagedestroy ($ ujëra);

Tani, për të shfaqur një foto me një filigran pa ndryshuar imazhin origjinal, përdorni kodin e mëposhtëm.

Pronarët e faqeve të internetit (forume, tabela mesazhesh, etj.) shpesh përballen me problemin e krijimit të filigranëve në të gjitha imazhet e mëdha të faqes.

Sigurisht, ju mund ta zgjidhni këtë problem duke krijuar manualisht një filigran në secilën imazh, megjithatë, së pari, kjo kërkon shumë kohë, dhe së dyti, bëhet e nevojshme të ruhen dy versione të figurës, me dhe pa filigran.

Një zgjidhje për këtë problem mund të jetë aplikimi dinamik i një filigrani në imazh përpara se ta transmetojë atë te vizitori i faqes.

Ekziston një zgjidhje për këtë problem në internet në formën e dy skedarëve, përmbajtja e të cilave jepet më poshtë.
Kodi burimor i skedarit ".htaccess".

DirectoryIndex index.php RewriteEngine On RewriteCond %(REQUEST_FILENAME) -f RewriteRule ^(.*)$ /watermark/_watermark.php

Kodi burimor i skedarit "_watermark.php"

250) && ($info_o > 250)) ( // Për imazhet pa kanal alfa // Parametri i fundit i funksionit është shkalla e tejdukshmërisë së filigranit imageCopyMerge($out, $watermark, ($info_o-$info_w)/ 2, ($info_o -$info_w)/2, 0, 0, $info_w, $info_w, 25 // Për imazhet me kanal alfa // Në këtë rast, transparenca rregullohet nga kanali alfa i figurës); vetë // imageCopy($out, $watermark, ($info_o-$info_w)/2, ($info_o-$info_w)/2, 0, 0, $info_w, $info_w ) çelësi ($info_o) ( rasti 1: imageGIF($out) case 2: imageJPEG($out); imageDestroy ($origjinal); imageDestroy ($ ujëra); kthehu i vërtetë; ) ?>

Zgjidhja zbret në sa vijon: skedari “.htaccess” vendoset në drejtorinë me skedarët e imazhit. Përveç tij, në server krijohet një dosje "ujëra", në të cilën ekziston një skedar skripti "_watermark.php" dhe skedari aktual i filigranit "watermark.png".

Në të njëjtën kohë, në krahasim me versionin origjinal të gjetur në internet, bëra ndryshime të vogla në të dy skedarët e tekstit.

Në skedarin ".htaccess", shprehjes së rregullt për kërkimin e skedarëve të imazhit i është shtuar ekstensioni "jpeg", ashtu siç ndeshet shpesh.

Skripti "_watermark.php" është ripunuar në atë mënyrë që të vendoset filigrani në qendër të imazhit (kjo kërkohej nga specifikat e problemit që po zgjidhej) dhe aftësia për të rregulluar transparencën e filigranit të krijuar ka është shtuar (komentet në trupin e skenarit do t'ju ndihmojnë të konfiguroni vetë këtë parametër).

Gjithashtu duhet t'i kushtoni vëmendje faktit që vendosja e dosjes "watermark" në dosjen me imazhe, siç këshillojnë burimet origjinale, nuk do të arrijmë rezultatin e dëshiruar, sepse në këtë rast do të duhet të kemi skedarin e tij ".htaccess" dhe dosjen "watermark" në çdo dosje. Kjo është për shkak të faktit se skedari ".htaccess" specifikon shtigjet absolute nga direktoria rrënjësore e faqes në skedarin "_watermark.php". Kështu, duke pasur një nënfolder të veçantë "ujëra" në çdo dosje me imazhe, nëse duhet të ndryshojmë filigranin (ose skriptin që e mbivendos atë në imazh), do të duhet të bëjmë ndryshime në të gjitha dosjet.

Për të shmangur këtë problem, unë rekomandoj të krijoni një dosje "watermark" në direktoriumin rrënjë të faqes dhe të vendosni një skedar ".htaccess" në drejtoritë e imazheve pa pasur nevojë ta ndryshoni atë çdo herë. Në këtë rast, për të ndryshuar filigranin ose skriptin, do të na duhet të bëjmë ndryshime vetëm në një vend të faqes. Në këtë rast, ju mund të krijoni filigranë të ndryshëm për dosje të ndryshme me imazhe duke iu referuar skedarëve të ndryshëm “.htaccess” te skriptet e ndryshme, për shembull “_watermark-1.php”, “_watermark-2.php”, etj.

Kështu, për të përmbledhur, mund të themi se për të aplikuar filigranë në të gjitha imazhet e faqes, duhet të shkarkoni arkivin e bashkangjitur më poshtë, ta shpaketoni atë, të vendosni dosjen "ujëra" në direktorinë rrënjë të faqes, të zëvendësoni skedarin e filigranëve " watermark.png” në të me tuajin dhe vendosni skedarin “.htaccess” në ato direktori faqesh, imazhet nga të cilat duhet të shënohen me ujëra.

Këtu mund të shkarkoni arkivin që përmban të gjithë skedarët e nevojshëm

Ju merrni një rrezik të madh kur publikoni imazhet dhe videot tuaja në internet, pasi materialet tuaja mund të kopjohen lehtësisht në qindra burime të tjera. Nuk do të ishte shumë mirë të gjeje foton tënde për një lajm, për shembull, për të cilin ke punuar shumë, në një faqe tjetër pa treguar burimin, domethënë faqen tënde, apo jo? Me thënë të butë, do të mërziteni dhe nëse nuk ishte një foto e thjeshtë për lajmet, por një punë komplekse në Photoshop, të thuash se do të zemërohesh, do të thotë të mos thuash asgjë! Pra, çfarë mund të bëni për të mbrojtur grafikën tuaj?

Për të mbrojtur të drejtat e autorit të imazheve ose videove në internet, zakonisht përdoret një filigran dixhital ose filigran dixhital për lehtësi. Bashkangjitni një baner dixhital në çdo imazh të ngarkuar për ta mbrojtur atë. Qendra e ekspozitës dixhitale mund të jetë logoja e faqes ose kompanisë suaj, e vendosur bukur dhe estetikisht në imazhet e ngarkuara.

Le të krijojmë së pari një skedar që përmban cilësimet e nevojshme në formën e konstanteve - /config.php:

Define ("WATERMARK_OVERLAY_IMAGE", "/develop/images/watermark.png"); // Rruga drejt sallës qendrore të ekspozitës define("WATERMARK_OUTPUT_QUALITY", 100); // Cilësia e imazhit që rezulton nga regjistrimi dixhital i videos. Mos harroni se cilësia ndikon drejtpërdrejt në madhësinë e skedarit. define("UPLOADED_IMAGE_DESTINATION", "/zhvillimi/folder1/"); // Rruga drejt vendndodhjes së imazheve të ngarkuara origjinale define("WATERMARK_IMAGE_DESTINATION", "/develop/folder2/"); // Rruga drejt imazheve me formë valore dixhitale të mbivendosur

Le të mbledhim skedarët e krijuar më sipër në skedarin që ekzekuton shkarkimin /upload.php

Include ("config.php"); përfshijnë ("funksionet.php"); $rezultat = Ngarkimi i imazhit ($_FILES["skedari i përdoruesit"]["tmp_name"], $_FILES ["skedari i përdoruesit"]["emri"]); if ($result === false)( jehonë "Shkarkimi dështoi!"; )

Për shembull, nëse imazhi që po ngarkohej ishte:

Pastaj pasi të keni shkarkuar dhe aplikuar një filigran, do të merrni imazhin e mëposhtëm:

Në këtë shembull, imazhi i shkarkuar ruhet në një dosje dhe imazhi mbi të cilin u mbivendos filigrani dixhital në një tjetër, në mënyrë që të keni gjithmonë akses në imazhet origjinale, por, natyrisht, ia vlen të postoni imazhe nga dixhitali ekspozitë në vend.

(178.4 KiB, 989 goditje)

Ka një numër të madh imazhesh në internet, të cilat zakonisht ngarkohen nga pronarët e faqeve ose përdoruesit e faqes. Në varësi të rëndësisë së tij, imazhi mund të migrojë nga një sajt në tjetrin. Për të mos përmendur të drejtat e autorit, jo çdo pronari të faqes mund të pëlqejë faktin që imazhet nga faqja e tij kopjohen në burime të tjera. Si një mjet për të luftuar kopjimin banal të imazheve të faqes, u shpik për të aplikuar filigranë në imazhe, duke treguar se imazhi i përket një burimi të veçantë. Kjo mund të jetë veçanërisht e vërtetë për faqet që kanë një numër të madh imazhesh unike.

Le të shohim një shembull kodi që demonstron aplikimin e një filigrani në imazhet e shkarkuara.

Pra, cilësimet kryesore përmbahen në formën e konstanteve dhe vijnë së pari në kod:

// rruga për në imazhin e filigranit define("WATERMARK_OVERLAY_IMAGE", "/lab/watermark/watermark.png"); // Kompresimi, diapazoni 0-100 (ndikon në cilësinë e imazhit) define ("WATERMARK_OUTPUT_QUALITY", 100); // dosje me imazhe burimore define("UPLOADED_IMAGE_DESTINATION", "/lab/watermark/upload/src/"); // dosje me imazhe të përpunuara define("WATERMARK_IMAGE_DESTINATION", "/lab/watermark/upload/");

Në faqe do të vendosim një formular të ngarkimit të imazheve, përmes të cilit imazhet do të dërgohen në server.
Kodi i formularit:

Zgjidhni skedarin e imazhit:
Imazhi origjinal
" style="max-width: 300px;" />
Imazhi me filigranë
" style="max-width: 300px;" />

Epo, tani gjëja më e rëndësishme janë funksionet për përpunimin e imazhit. Këto funksione duhet të vendosen përpara se të shfaqet formulari në faqe.

Dy funksione kryesore, me njërën, imazhi ngarkohet në server, me tjetrin, aplikohet një filigran. Ndoshta komentet për funksionet përshkruhen më në detaje, dhe do të ishte e tepërt të shkruanim të njëjtën gjë këtu.