Menjana tera air ialah langkah paling mudah dalam keseluruhan teknologi. Mengesan lokasi tera air melibatkan sedikit pengetahuan geometri yang pada mulanya cetek.
Dalam bab lepas, kami mempelajari teknologi pemangkasan imej. Tera air hanyalah ubah bentuk kecil teknologi pemangkasan imej.
Sedikit pengetahuan geometri utama:
1. Saiz imej
2. Di mana koordinat imej diletakkan
3. Lebar dan ketinggian imej
Inti teknologi penanda air imej adalah bersamaan dengan dua gambar: satu gambar besar; Letakkan imej kecil di suatu tempat dalam imej yang lebih besar.
Teknologi watermark ialah teknologi yang paling mudah dalam hal ini Kaedah pelaksanaannya ialah:
1. Buka imej asal (juga dipanggil imej sasaran operasi)
2. Buka imej tera air (Juga dipanggil imej sumber tera air)
3. Gunakan imagecopymerge untuk menggabungkan imej kecil ke kedudukan imej besar yang ditentukan
4. Keluarkan imej
.5 Musnahkan sumber
1. Tera air imej ringkas
Sasarkan imej yang perlu ditanda air (dengan andaian ia disimpan dalam d:/ www/img/meinv.jpg pada komputer saya) , gambarnya adalah seperti berikut:
Gambar logo yang perlu ditambah (dengan andaian ia disimpan dalam d:/ www/img/logo.png pada komputer saya), gambarnya adalah seperti berikut:
Perkara yang paling penting ialah menggunakan fungsi ini:
bool imagecopymerge ( sumber $ imej sasaran, sumber $ imej sumber, int $ sasaran bermula x, int $sasaran mula y, int $sumber x, int $sumber y, int $lebar sumber, int $tinggi sumber, int $transparensi )
Nota:
Ketelusan Nilai ialah integer dari 0-100. Perbezaan antara imagecopy dan imagecopymerge ialah satu mempunyai ketelusan dan satu lagi tidak.
Ikuti langkah yang diringkaskan dan lakukan kaedah mudah:
<?php //打开目标图片 $dst = imagecreatefrompng('/upload/course/000/000/002/5833ebba648cf229.png'); //打开Logo来源图片 $src = imagecreatefrompng('/upload/course/000/000/002/5833ebe90cc11285.png'); //得到目标图片的宽高 $dst_info = getimagesize('5833ebba648cf229.png'); //得到logo图片的宽高 $src_info = getimagesize('5833ebe90cc11285.png'); //放到最右下脚可得出图片水印图片需要开始的位置即: //x点位置:需要大图的宽 - 小图的宽; //y点位置:放大图的高 - 小图的高 $dst_x = $dst_info[0] - $src_info[0]; $dst_y = $dst_info[1] - $src_info[1]; //要将图片加在右下脚 imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 100); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst); imagedestroy($src); ?>
Mari kita lihat kesan akhir seperti berikut:
2. Lakukan Satu fungsi tera air imej pintar
1. Kita boleh membuat fungsi yang membuka imej secara automatik
Kita semua telah mempelajari fungsi mencipta imej atau membuka imej sebelum ini:
1
2.imagecreatetruecolor
3.imagecreatefromjpeg dll.
Mari beralasan. Jika kita boleh mencari cara untuk mendapatkan jenis MIME imej, kita hanya boleh mencari fungsi untuk membuka fail berdasarkan jenis MIME.
Oleh itu, langkah ini terbahagi kepada dua bahagian:
1. Dapatkan jenis MIME dan jenis pulangan.
2. Lulus dalam laluan, buka fungsi dan kembalikan sumber.
Oleh itu, kita boleh menjadikan dua blok di atas menjadi dua fungsi.
Masukkan laluan imej, kembalikan lebar, ketinggian dan jenis MIME imej ke dalam tatasusunan dan gunakan parameter yang sepadan apabila diperlukan.
Kita boleh menghantar jenis mime kepada tatasusunan bersekutu jenis dalam $data. Kodnya adalah seperti berikut:
function getImageInfo($path) { $info = getimagesize($path); $data['width'] = $info[0]; $data['height'] = $info[1]; $data['type'] = $info['mime']; return $data; }
Fungsi untuk membuka fail, memasukkan jenis imej, melepasi laluan imej, imej akan dibuka dan jenis sumber akan dikembalikan.
Dalam contoh berikut, $type dinilai menggunakan suis...case Jika imagejpeg, imagecreatefromjpeg digunakan untuk membuka fail yang ditentukan oleh laluan dalam $path. Akhirnya, jenis sumber dikembalikan.
function openImg($path, $type) { switch ($type) { case 'image/jpeg': case 'image/jpg': case 'image/pjpeg': $img = imagecreatefromjpeg($path); break; case 'image/png': case 'image/x-png': $img = imagecreatefrompng($path); break; case 'image/gif': $img = imagecreatefromgif($path); break; case 'image/wbmp': $img = imagecreatefromwbmp($path); break; default: exit('图片类型不支持'); } return $img; }
Kira kedudukan secara automatik:
Kita boleh membahagikan kedudukan kepada 10 nilai, antara 0-9.
Kami menggunakan lukisan untuk mewakili kedudukan:
Nota:
0 ialah kedudukan rawak dan boleh muncul di mana-mana sahaja pada halaman. Tetapi ia tidak boleh melebihi skop gambar. Kedudukan
0 ialah:
x = 0 至 (大图宽 - 小图宽) y = 0 至 (大图高 - 小图高)
Kedudukan 1 ialah:
x = 0 y = 0
Kedudukan 2 ialah:
x = (大图宽 - 小图宽) /2 y = 0
Kedudukan 3 ialah :
Kedudukanx = 大图宽 - 小图宽 y = 0
4 ialah:
x = 0 y = (大图高 - 小图高) / 2
... ...dan seterusnya.
Mari kita fikirkan tentang kod pelaksanaan 0-9:
switch($pos){ case 1: $x=0; $y=0; break; case 2: $x=ceil(($info['width']-$logo['width'])/2); $y=0; break; case 3: $x=$info['width']-$logo['width']; $y=0; break; case 4: $x=0; $y=ceil(($info['height']-$logo['height'])/2); break; case 5: $x=ceil(($info['width']-$logo['width'])/2); $y=ceil(($info['height']-$logo['height'])/2); break; case 6: $x=$info['width']-$logo['width']; $y=ceil(($info['height']-$logo['height'])/2); break; case 7: $x=0; $y=$info['height']-$logo['height']; break; case 8: $x=ceil(($info['width']-$logo['width'])/2); $y=$info['height']-$logo['height']; break; case 9: $x=$info['width']-$logo['width']; $y=$info['height']-$logo['height']; break; case 0: default: $x=mt_rand(0,$info['width']-$logo['width']); $y=mt_rand(0,$y=$info['height']-$logo['height']); break; }
Akhirnya panggil imej penggabungan, output dan kod pemusnahan:
imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm);
Kami akan menyepadukan kod akhir Selepas itu , saya akan berikan anda percubaan untuk melihat kesannya:
<?php water('/upload/course/000/000/002/5833ebba648cf229.png','/upload/course/000/000/002/5833ebe90cc11285.png',0,50); function water($img,$water,$pos=9,$tm=100){ $info=getImageInfo($img); $logo=getImageInfo($water); $dst=openImg($img,$info['type']); $src=openImg($water,$logo['type']); switch($pos){ case 1: $x=0; $y=0; break; case 2: $x=ceil(($info['width']-$logo['width'])/2); $y=0; break; case 3: $x=$info['width']-$logo['width']; $y=0; break; case 4: $x=0; $y=ceil(($info['height']-$logo['height'])/2); break; case 5: $x=ceil(($info['width']-$logo['width'])/2); $y=ceil(($info['height']-$logo['height'])/2); break; case 6: $x=$info['width']-$logo['width']; $y=ceil(($info['height']-$logo['height'])/2); break; case 7: $x=0; $y=$info['height']-$logo['height']; break; case 8: $x=ceil(($info['width']-$logo['width'])/2); $y=$info['height']-$logo['height']; break; case 9: $x=$info['width']-$logo['width']; $y=$info['height']-$logo['height']; break; case 0: default: $x=mt_rand(0,$info['width']-$logo['width']); $y=mt_rand(0,$y=$info['height']-$logo['height']); break; } imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm); imagejpeg($dst); imagedestory($dst); imagedestory($src); } function openImg($path,$type){ switch($type){ case 'image/jpeg': case 'image/jpg': case 'image/pjpeg': $img=imagecreatefromjpeg($path); break; case 'image/png': case 'image/x-png': $img=imagecreatefrompng($path); break; case 'image/gif': $img=imagecreatefromgif($path); break; case 'image/wbmp': $img=imagecreatefromwbmp($path); break; default: exit('图片类型不支持'); } return $img; } ?>
Artikel ini hanya untuk kakitangan teknikal bertukar pembelajaran dan pertukaran penggunaan teknologi.
Imej yang digunakan dalam artikel ini:
Foto Cik Fan Bingbing bukan untuk kegunaan komersial. Semua hak pemilikan adalah milik Cik Fan Bingbing dan institusi berkaitan.
Logo yang digunakan dalam artikel ini adalah milik Baidu.
Ini adalah kenyataan!