Pemprosesan tera air imej PHP
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!