Penggunaan fungsi IMAGE0.JPEG pada PHP

Jika Anda ingin menambahkan tanda air ke foto tanpa repot dengan editor grafis atau menambahkannya saat mengunggah foto ke server, maka tutorial ini cocok untuk Anda.

Dalam tutorial ini, saya akan menunjukkan cara menambahkan tanda air ke gambar dengan cepat tanpa benar-benar mengubah gambar aslinya. Pertama-tama, Anda memerlukan gambar untuk digunakan sebagai tanda air Anda.

Kemudian kita membentuk file header:

// baris ini akan memberitahu browser bahwa kita sedang melewati header gambar jpg ["content-type: image / jpeg"];

Kemudian kita bentuk gambar png dan kami mendapatkan dimensinya:

// buat tanda air png $ tanda air = imagecreatefrompng["watermark.png"]; // dapatkan lebar dan tinggi $ watermark_width = imagesx [$ watermark]; $ watermark_height = gambar [$ tanda air];

Kami akan melakukan hal yang sama dengan gambar asli, tetapi hanya dalam format jpg. Ini adalah kejadian umum untuk foto yang diunggah melalui formulir. Kami bertindak sebagai berikut:

// buat gambar jpg $ image_path = "original.jpg"; $ gambar = imagecreatefromjpeg [$ image_path]; // mendapatkan ukuran gambar $ size = getimagesize [$ image_path];

Sekarang kita perlu menempatkan tanda air pada gambar:

// letakkan tanda air di kanan bawah. Indentasi 5px $ dest_x = $ ukuran - $ watermark_width - 5; $ tujuan_y = $ ukuran - $ tinggi_tanda air - 5;

Kemudian kami akan menyiapkan opsi pencampuran untuk kedua gambar:

Imagealphablending [$ gambar, benar]; imagealphablending [$ tanda air, benar];

Terakhir, kami membuat gambar baru menggunakan parameter:

// buat imagecopy image baru [$ image, $ watermark, $ dest_x, $ dest_y, 0, 0, $ watermark_width, $ watermark_height]; imagejpeg [$ gambar];

Penting untuk membersihkan diri sendiri:

// mengosongkan memori imagedestroy [$ image]; imagedestroy [$ tanda air];

Anda dapat menggunakan Photoshop untuk menyesuaikan transparansi tanda air.

Itu semua dengan teori. Sekarang kita akan menerapkan pengetahuan kita dalam proyek nyata. Semua ini harus disimpan ke file. Misalnya disebut watermark.php

Header ["tipe konten: gambar / jpeg"]; // dapatkan nama gambar melalui GET $ image = $ _GET ["image"]; // buat tanda air $ tanda air = imagecreatefrompng["watermark.png"]; // dapatkan tinggi dan lebar watermark $ watermark_width = imagesx [$ watermark]; $ watermark_height = gambar [$ tanda air]; // membuat jpg dari gambar asli $ image_path = "/ path / ke / image / folder /". $ gambar; $ gambar = imagecreatefromjpeg [$ image_path]; // jika terjadi kesalahan if [$ image === false] [mengembalikan false;] $ size = getimagesize [$ image_path]; // beri tanda air pada gambar $ dest_x = $ size - $ watermark_width - 5; $ tujuan_y = $ ukuran - $ tinggi_tanda air - 5; imagealphablending [$ gambar, benar]; imagealphablending [$ tanda air, benar]; // buat imagecopy image baru [$ image, $ watermark, $ dest_x, $ dest_y, 0, 0, $ watermark_width, $ watermark_height]; imagejpeg [$ gambar]; // mengosongkan memori imagedestroy [$ image]; imagedestroy [$ tanda air];

Sekarang, untuk menampilkan foto dengan tanda air tanpa mengubah gambar aslinya, gunakan kode berikut.

Pemilik situs [forum, papan pesan, dll.] sering menghadapi masalah dalam membuat tanda air pada semua gambar situs besar.

Tentu saja, masalah ini dapat diselesaikan dengan membuat tanda air secara manual pada setiap gambar, namun, pertama, membutuhkan banyak waktu, dan kedua, perlu untuk menyimpan dua versi gambar, dengan dan tanpa tanda air.

Solusi untuk masalah ini dapat berupa pengenaan watermark dinamis pada gambar sebelum mentransfernya ke pengunjung situs.

Ada solusi untuk masalah ini di Internet dalam bentuk dua file, yang isinya diberikan di bawah ini.
Kode sumber file ".htaccess"

DirectoryIndex index.php RewriteEngine Pada RewriteCond% [REQUEST_FILENAME] -f RewriteRule ^ [. *] $ /Watermark/_watermark.php

Kode sumber file "_watermark.php"

250] && [$ info_o> 250]] [// Untuk gambar tanpa alpha channel // Parameter fungsi terakhir adalah opacity dari watermark imageCopyMerge [$ out, $ watermark, [$ info_o- $ info_w] / 2, [ $ info_o - $ info_w] / 2, 0, 0, $ info_w, $ info_w, 25]; // Untuk gambar dengan saluran alfa // Dalam hal ini, transparansi dikendalikan oleh saluran alfa dari gambar itu sendiri // imageCopy [$ out, $ watermark, [$ info_o- $ info_w] / 2, [$ info_o- $ info_w] / 2, 0, 0, $ info_w, $ info_w];] switch [$ info_o] [case 1: imageGIF [$ keluar]; break; case 2: imageJPEG [$ out]; break; case 3: imagePNG [$ keluar]; break; default: return false;] imageDestroy [$ keluar]; imageDestroy [$asli]; imageDestroy [$ tanda air]; kembali benar; ]?>

Solusinya adalah sebagai berikut, file ".htaccess" ditempatkan di direktori dengan file gambar. Selain itu, folder "watermark" dibuat di server, yang berisi file skrip "_watermark.php" dan file watermark sebenarnya "watermark.png".

Pada saat yang sama, saya membuat perubahan kecil pada kedua file teks dibandingkan dengan versi asli yang saya temui di Internet.

file htaccess, ekspresi reguler Ekstensi "jpeg" telah ditambahkan untuk mencari file gambar, yang juga merupakan kejadian umum.

Skrip "_watermark.php" telah didesain ulang untuk menempatkan tanda air di tengah gambar [ini diperlukan oleh spesifikasi masalah yang sedang dipecahkan] dan kemampuan untuk menyesuaikan transparansi tanda air yang dibuat telah ditambahkan [komentar di badan skrip akan membantu Anda mengatur sendiri parameter ini].

Anda juga harus memperhatikan fakta bahwa dengan menempatkan folder "tanda air" di folder dengan gambar, seperti yang disarankan oleh sumber aslinya, kami tidak akan mencapai hasil yang diinginkan. dalam hal ini kita harus memiliki file ".htaccess" dan folder "watermark" kita sendiri di setiap folder. Ini karena file ".htaccess" menentukan jalur absolut dari direktori root situs ke file "_watermark.php". Jadi, memiliki subfolder "tanda air" terpisah di setiap folder dengan gambar, jika perlu mengubah tanda air [atau skrip yang memaksakannya pada gambar], kita harus membuat perubahan di semua folder.

Untuk menghindari masalah ini, saya sarankan untuk membuat folder "watermark" di direktori root situs, dan meletakkan file ".htaccess" di direktori gambar tanpa harus mengubahnya setiap saat. Dalam hal ini, untuk mengubah tanda air atau skrip, kita perlu membuat perubahan hanya di satu tempat di situs. Buat tanda air yang berbeda untuk folder yang berbeda dengan gambar dalam hal ini, Anda dapat merujuk ke skrip yang berbeda dari file ".htaccess" yang berbeda, misalnya "_watermark-1.php", "_watermark-2.php", dll.

Jadi, untuk meringkas, kita dapat mengatakan bahwa untuk melapisi tanda air pada semua gambar situs, Anda perlu mengunduh arsip yang terlampir di bawah ini, membongkarnya, menempatkan folder "tanda air" di direktori root situs, ganti " watermark.png" file watermark di dalamnya dengan milik Anda sendiri, dan letakkan file ".htaccess" di direktori situs tersebut, gambar dari mana harus ditandai dengan tanda air.

Anda dapat mengunduh arsip yang berisi semua file yang diperlukan di sini

Dalam beberapa kasus, menambahkan tanda air ke gambar yang Anda posting di situs Anda adalah satu-satunya cara untuk melindunginya dari pencurian. Selain itu, dikabarkan bahwa tanda air seperti itu menarik lalu lintas tambahan.

Ada banyak cara untuk menandai gambar menggunakan PHP, tetapi klien saya membutuhkan cara penerapan yang memungkinkan mengubah tanda air ke yang baru kapan saja.

Ternyata, ada solusi seperti itu.

Ini biasanya digunakan oleh orang-orang yang mengembangkan situs dengan sebagian besar konten grafis.

Memilih Metode Watermarking

Masalah dengan penerapan semua kekacauan ini adalah memilih metode watermarking antara kinerja dan fleksibilitas. Solusi sempurna yang cocok untuk semua orang sama sekali tidak ada. Inilah sebabnya mengapa ada banyak implementasi.

Dalam kasus saya, pelanggan berhak untuk mengubah citra kapan saja dan sebagai ganti "Tanduk dan kuku" untuk menulis "Kuku dan Tanduk"... Metode watermarking yang dipilih harus menanggung ini juga.

Inti dari teknologi watermarking yang dijelaskan di sini adalah menambahkan tanda ini setiap kali gambar dimuat. Ya, metode ini membawa sejumlah batasan yang secara signifikan dapat mempengaruhi kinerja, tetapi seperti yang mereka katakan, pelanggan selalu benar dan oleh karena itu jika demikian. tugas mengharuskan Anda untuk menerapkan tanda air secara dinamis, maka inilah yang perlu Anda lakukan.

Jika ada yang punya cara yang lebih mudah maka Anda dipersilakan di komentar. Akan menarik untuk disimak.

Sebelum membawa kode apa pun, saya ingin menjelaskan kelebihannya, serta memberikan contoh yang berfungsi.

Kelebihan:

  • Anda dapat mengubah tanda air setidaknya 500 kali sehari;
  • dapat digunakan ke CMS mana pun [tidak terikat dengannya dengan cara apa pun].

Minus:

  • tergantung pada kinerja hosting [jika Anda memiliki banyak gambar atau beresolusi tinggi, maka ini dapat membebani server secara signifikan];
  • pikiran yang ingin tahu masih dapat menghapus tanda air Anda.

Kesimpulan: untuk menempatkan sejumlah kecil gambar dengan tanda air yang diterapkan, metode ini sempurna, tetapi jika Anda akan membuka galeri foto, akan lebih tepat untuk mencari sesuatu yang tidak terlalu banyak dimuat.

Contoh

Menerapkan watermarking dengan PHP

Seperti yang dijanjikan, untuk ini Anda tidak perlu memiliki pengetahuan khusus, Anda harus:

  1. file yang ada di arsip dan ditempatkan di direktori root situs Anda;
  2. gambar, yang akan bertindak sebagai tanda air, ditempatkan di direktori root situs dan beri nama [dalam kasus saya, ini adalah sapuan kuas putih, jadi mengikuti tautan itu mungkin tidak dapat dibedakan dengan latar belakang browser Anda]. Gambar harus persis PNG, karena mengandung lapisan transparan. Jika Anda ingin menggunakan GIF, maka Anda perlu mengedit file image.php;
  3. di tempat Anda ingin menampilkan gambar dengan tanda air, letakkan kode:

Itu saja. Semua orang senang, baik Anda maupun pelanggan.

Anda berada pada risiko besar ketika Anda mempublikasikan gambar dan video Anda di Internet, karena materi Anda dapat dengan mudah disalin ke ratusan sumber daya lainnya. Tidak akan terlalu keren untuk menemukan gambar Anda untuk berita, misalnya, di mana Anda bekerja keras, di situs lain tanpa menentukan sumbernya, yaitu situs Anda, bukan? Anda, secara halus, akan kesal, tetapi jika tidak gambar sederhana berita, tapi pekerjaan yang sulit di Photoshop, untuk mengatakan bahwa Anda akan marah adalah untuk mengatakan apa-apa! Jadi apa yang dapat Anda lakukan untuk melindungi karya seni Anda?

Untuk melindungi hak cipta untuk gambar atau video di Internet, sebagai aturan, tanda air digital atau CEH digunakan untuk kenyamanan. Lampirkan CEH ke setiap gambar yang diunggah untuk mengamankannya. CEH dapat menjadi logo situs web atau perusahaan Anda, ditempatkan dengan indah dan estetis pada gambar yang diunggah.

Pertama, mari buat file yang berisi pengaturan yang diperlukan dalam bentuk konstanta - /config.php:

Tentukan ["WATERMARK_OVERLAY_IMAGE", "/develop/images/watermark.png"]; // Jalur ke definisi CEH Anda ["WATERMARK_OUTPUT_QUALITY", 100]; // Kualitas gambar yang dihasilkan dari CEH. Ingat bahwa kualitas secara langsung mempengaruhi ukuran file. define["UPLOADED_IMAGE_DESTINATION", "/ kembangkan / folder1 /"]; // Path ke lokasi gambar asli yang dimuat tentukan ["WATERMARK_IMAGE_DESTINATION", "/ develop / folder2 /"]; // Jalur ke gambar dengan tanda air digital yang dilapiskan

Mari kumpulkan file yang dibuat di atas dalam file unduhan yang dapat dieksekusi /upload.php

Sertakan ["config.php"]; include["fungsi.php"]; $ hasil = ImageUpload [$ _ FILES ["userfile"] ["tmp_name"], $ _FILES ["userfile"] ["nama"]]; if [$ result === false] [echo "Upload gagal!";]

Misalnya, jika gambar yang diunggah adalah:

Kemudian setelah mengunduh dan melapisi tanda air, Anda mendapatkan gambar berikut:

Dalam contoh ini, gambar yang diunggah disimpan dalam satu folder, dan gambar, di mana tanda air digital telah ditumpangkan, ke yang lain, sehingga Anda selalu memiliki akses ke gambar asli, tetapi, tentu saja, ada baiknya memposting gambar. dari CEH di situs.

[178.4 KiB, 989 hit]

Salah satu hal menarik yang dapat Anda lakukan dengan perpustakaan grafis PHP GD adalah kelas yang menempatkan tanda air pada gambar. Singkatnya, tanda air adalah teknologi untuk melindungi gambar digital dari penggunaan yang tidak sah dengan menerapkan tanda air atau tanda tangan pada gambar tersebut. Akibatnya, dapat digunakan [dan umumnya] untuk menentukan pemilik hak cipta untuk sebuah gambar. Jadi, mari kita melangkah lebih jauh.

pengantar

Pada tahap perkembangannya, PHP menawarkan programmer berbagai fungsi untuk menghasilkan gambar secara dinamis dan bekerja dengannya. Dalam artikel ini, saya akan menunjukkan kepada Anda teknik untuk membuat kelas yang akan memberi tanda air pada gambar-gambar ini. Kelas ini akan bekerja dengan dua gambar: asli dan tanda air. Sebagai tambahan, parameter ketiga telah diperkenalkan - kelas kita akan berisi variabel alpha. Ini akan memungkinkan kita untuk menggunakan saluran alfa untuk tanda air kita.

Sebagai referensi

saluran alfa: bagian dari gambar yang menyimpan informasi tentang transparansi masing-masing area gambar, sedangkan saluran warna menyimpan informasi tentang warna gambar. V editor grafis digunakan untuk menutupi [melindungi dari pengeditan] area tertentu dari gambar. Dalam beberapa aplikasi, mereka disebut topeng transparan.

Informasi dalam saluran alfa paling sering mewakili area yang dipilih - beberapa bentuk atau susunan area berwarna. Menjaga saluran alfa dalam gambar meningkatkan ukuran file sebesar 1/3. Gambar RGB dapat memiliki hingga 24 saluran alfa. Bitmap dan gambar yang diindeks tidak boleh berisi saluran alfa.

Bagian satu - dasar-dasarnya

Sebelum kita mulai menulis kelas itu sendiri, perhatikan fungsi-fungsi yang akan digunakan di dalamnya. Berikut adalah daftarnya:

# mengembalikan lebar dan tinggi gambar imagesx[] imagesy[] # membuat gambar true-color imagecreatetruecolor baru # mengembalikan array asosiatif dengan tombol merah, hijau dan biru [+ alpha channel] yang berisi nilai yang sesuai untuk indeks warna yang ditentukan imagecolorsforindex [] # mengembalikan indeks warna piksel pada lokasi yang ditentukan dalam gambar imagecolorat [] # menggambar satu piksel dari warna yang ditentukan imagesetpixel [] # mengembalikan indeks warna indeks warna di palet gambar, pengenal warna [terdiri dari komponen RGB] dan indeks warna palet gambar yang "paling dekat" dengan RGB -nilai yang sesuai [data ini diperlukan untuk fungsi imagesetpixel []] imagecolorexact [] imagecolorallocate [] imagecolorclosest []

Seperti yang Anda lihat, php memiliki fungsi yang cukup untuk bekerja dengan grafik. Meskipun tujuan dari beberapa dari mereka tidak sepenuhnya jelas dalam teori, dalam praktiknya semuanya jauh lebih sederhana. Oleh karena itu, untuk mengetahui cara bekerja dengan mereka, kami akan menerapkannya di kelas kami.

Memilih jalan menuju tujuan

Sekarang kita telah memutuskan tujuan dari "proyek mini" kita, mari kita kembali sedikit dan berbicara tentang cara-cara untuk mengimplementasikannya.

Pertama, aplikasi kami menerima dua gambar - gambar asli dan tanda air itu sendiri. Selanjutnya, kita perlu menentukan dimensi gambar-gambar ini [lebar-lebar dan tinggi-tinggi]. Kami membutuhkan data ini untuk menempatkan tanda air di tengah gambar [dengan asumsi ukuran tanda air akan lebih kecil dari gambar itu sendiri].

Kemudian kita perlu melapisi tanda air kita pada gambar asli. Untuk melakukan ini, kita perlu menambahkan warna [secara matematis] dari gambar overlay untuk mendapatkan yang ketiga.

Dan pada akhirnya, kita perlu menampilkan gambar yang dihasilkan di browser. V pada kasus ini gambar akan terbuka langsung dari sumber yang ditentukan dalam tag " "

Saya pikir sudah ada cukup teori - poin-poin kunci di dalamnya diungkapkan dengan cukup rinci. Sekarang mari kita langsung ke penulisan skrip.

Bagian dua - menulis naskah

Mari kita mulai dengan hal yang paling sederhana - tulis kelas yang membuat file bertanda air. Sebut saja "watermark" dan tulis kodenya di file "api.watermark.php". "Kerangka" kelas akan menjadi tiga fungsi:

Langkah selanjutnya adalah menulis kode untuk fungsi kelas "watermark". Tambahan file "api.watermark.php" dengan baris kode berikut:

# fungsi yang menggabungkan dua sumber gambar menjadi satu fungsi create_watermark [$ main_img_obj, $ watermark_img_obj, $ alpha_level = 100] [# menerjemahkan nilai transparansi saluran alpha dari% ke puluhan $ alpha_level / = 100; # menghitung dimensi gambar [lebar dan tinggi] ] $ main_img_obj_w = imagesx [$ main_img_obj]; $ main_img_obj_h = imagey [$ main_img_obj]; $ watermark_img_obj_w = imagesx [$ watermark_img_obj]; $ watermark_img_obj_h = koordinat imagey_obim $ watermark_img / 2] - [$j_watermark_img_img_obj ] ceil [[$ main_img_obj_w / 2] + [$ watermark_img_obj_w / 2]]; $ main_img_obj_min_y = lantai [[$ main_img_hobj_h / ]; $ main_img_obj_max_y = ceil [[$ main_img_obj_h / 2] + [$ tanda air /img_obj_h]; # buat gambar baru $ return_img = imagecreatetruecolor [$ main_img_obj_w, $ main_img_obj_h]; # buka sumber " gambar yang diberi watermark kembali $ return_img; ] # akhir fungsi create_watermark[]

Sekarang mari kita lihat lebih dekat fungsi create_watermark[].

Pertama-tama, kami memberikan tiga parameter ke sana:

# gambar asli yang akan diberi watermark $ main_img_obj # watermark itu sendiri harus mengandung alpha channel $ watermark_img_obj # nilai transparansi alpha channel watermark, [0-100, default = 100] $ alpha_level

[Penting untuk dicatat bahwa fungsi kita menerima gambar sebagai objek, bukan hanya jalur ke sana - tetapi lebih lanjut tentang itu nanti]

Langkah selanjutnya adalah membuat gambar baru yang benar-benar berwarna dengan dimensi yang sama dengan gambar aslinya. Gambar ini [variabel $ return_img] akan digunakan untuk menggabungkan informasi dari gambar asli [gambar dan tanda air].

Tetapi sebelum itu, Anda masih perlu "berjalan" melalui masing-masing dari dua gambar asli dan "menggabungkannya" menjadi satu. Tapi terlalu dini untuk melakukannya - kami belum siap untuk ini. Sebagai gantinya, mari posting komentar "beberapa kode" dan kemudian tambahkan sepotong kode ke tempat itu.

Akhirnya akan menampilkan gambar yang dimodifikasi kami di halaman web yang memintanya. Selanjutnya, pertimbangkan dua fungsi pembantu yang tersisa.

Bagian tiga - fungsi pembantu

Selain fungsi create_watermark, ada dua fungsi lagi di kelas watermark kita. Ayo lanjutkan sumber kelas dengan baris berikut:

# rata-rata dua warna berdasarkan fungsi transparansi alfa _get_ave_color [$ color_a, $ color_b, $ alpha_level] [return round [[[$ color_a * [1- $ alpha_level]] + [$ color_b * $ alpha_level]]];] # return nilai komponen RGB terdekat dari fungsi gambar baru _get_image_color [$ im, $ r, $ g, $ b] [$ c = imagecolorexact [$ im, $ r, $ g, $ b]; if [$ c! = - 1] kembalikan $ c; $ c = imagecolorallocate [$ im, $ r, $ g, $ b]; if [$ c! = - 1] kembalikan $ c; kembalikan imagecolorcloset [$ im, $ r, $g, $b];]

Dan sekarang untuk lebih jelasnya. Fungsi pertama kami "_get_ave_color" mengambil nilai numerik dari dua warna dan saluran alfa. Ini mengembalikan nilai rata-rata mereka. Kita membutuhkan fungsi ini untuk menentukan warna yang akan diperoleh ketika piksel dari dua gambar ditumpangkan.

Fungsi kedua "_get_image_color" membagi gambar menjadi komponen merah, hijau dan biru [palet rgb]. Dengan built-in fungsi php untuk bekerja dengan grafik [deskripsinya ada di awal artikel] kami mendapatkan nilai warna terdekat untuk gambar baru.

Selain itu, beberapa poin masih diverifikasi. Pertama, jika mungkin untuk mendapatkan nilai yang tepat [variabel $c], maka itu dikembalikan dari fungsi [kembalikan $c]. Jika tidak, upaya dilakukan untuk mencocokkan warna menggunakan fungsi imagecolorallocate []. Jika ini tidak membantu mencapai hasil, maka dengan menggunakan fungsi imagecolorclosest [], nilai warna terdekat [paling tidak akurat] akan dikembalikan.

Nah, kelas kita hampir siap. Tetap hanya mengganti komentar "beberapa kode" di fungsi "create_watermark" dengan baris berikut:

# loop melalui gambar untuk [$ y = 0; $ y< $main_img_obj_h; $y++] { for [$x = 0; $x < $main_img_obj_w; $x++] { $return_color = NULL; # определение истинного расположения пикселя в пределах # нашего водяного знака $watermark_x = $x - $main_img_obj_min_x; $watermark_y = $y - $main_img_obj_min_y; # выбор информации о цвете для наших изображений $main_rgb = imagecolorsforindex[$main_img_obj, imagecolorat[$main_img_obj, $x, $y]]; # если наш пиксель водяного знака непрозрачный if [$watermark_x >= 0 && $ tanda air_x< $watermark_img_obj_w && $watermark_y >= 0 && $ tanda air_y< $watermark_img_obj_h] { $watermark_rbg = imagecolorsforindex[$watermark_img_obj, imagecolorat[$watermark_img_obj, $watermark_x, $watermark_y]]; # использование значения прозрачности альфа-канала $watermark_alpha = round[[[127-$watermark_rbg["alpha"]]/127],2]; $watermark_alpha = $watermark_alpha * $alpha_level; # расчет цвета в месте наложения картинок $avg_red = $this->_get_ave_color [$ main_rgb ["merah"], $ watermark_rbg ["merah"], $ watermark_alpha]; $ avg_green = $ this -> _ get_ave_color [$ main_rgb ["hijau"], $ watermark_rbg ["hijau"], $ watermark_alpha]; $ avg_blue = $ this -> _ get_ave_color [$ main_rgb ["biru"], $ watermark_rbg ["biru"], $ watermark_alpha]; # menggunakan data yang diterima, hitung indeks warna $ return_color = $ this -> _ get_image_color [$ return_img, $ avg_red, $ avg_green, $ avg_blue]; # jika Anda tidak dapat memilih warna, maka ambil saja # salinan piksel asli] else [$ return_color = imagecolorat [$ main_img_obj, $x, $y];] # menggambar gambar baru dari piksel yang dihasilkan imagesetpixel [ $ return_img, $x, $y, $ return_color]; ]]

Setelah menulis bagian kode yang begitu penting, Anda dapat berhenti sejenak dan memikirkan analisisnya secara lebih rinci.

Skrip kami pertama melintasi gambar menggunakan dua for loop. Secara paralel, koordinat setiap piksel watermark masih dihitung.

Langkah selanjutnya adalah mencari informasi RGB untuk setiap piksel. Jika piksel saat ini tidak berada di area persimpangan gambar asli dan tanda air, maka kelas kami hanya menduplikasi piksel untuk gambar baru. Jika piksel terletak di area perpotongan, kita perlu menentukan warnanya sebagai hasil dari tumpang tindih antara gambar asli dan tanda air.

Untuk menentukan warna area persimpangan, pertama-tama kita perlu mendapatkan nilai variabel RGB dari tanda air menggunakan informasi yang kita dapatkan di loop "untuk". Kemudian, dengan menggunakan fungsi "_get_ave_color", nilai warna rata-rata untuk gambar baru ditentukan. Selanjutnya muncul fungsi "_get_image_color" untuk menentukan skema warna yang akan digunakan oleh fungsi "return_img".

Akibatnya, setelah loop "untuk" selesai, kami memiliki gambar yang sudah jadi dengan tanda air.

Sekarang mari kita periksa kelas kita beraksi.

Bagian empat - test drive

Pertama, kita membutuhkan dua file. Beri nama yang pertama "watermark_test.php" dan masukkan kode berikut di dalamnya:

Tujuan file ini sangat sederhana: menampilkan gambar asli [main.jpg] dan diterima [watermark.png, dengan tanda air] di browser.

Seperti yang Anda lihat, gambar kedua kami [watermark.png] mengacu pada file php image.php, bukan file gambar. Tautan ini terlihat seperti permintaan GET, di mana nilai dua variabel diteruskan ke file php: $ main dan $ watermark.

Beri nama file kedua "image.php" dan tempatkan kode berikut di dalamnya:

create_watermark [$ main_img_obj, $ watermark_img_obj, 66]; # tampilkan gambar hasil kita di browser - # tetapi pertama-tama beri tahu bahwa itu adalah file header jpeg ["Jenis Konten: image / jpeg"]; header ["Disposisi-Konten: sebaris; nama file =". $ _GET ["src"]]; imagejpeg [$ return_img_obj, "", 50]; ?>

Nah, kita sampai di final. [ZIP, 47.6Kb]

Diperbarui: 24.05.2021

103583

Jika Anda melihat kesalahan, pilih sepotong teks dan tekan Ctrl + Enter

Bài mới nhất

Chủ Đề