Sebagai bahasa pembangunan web yang berkuasa, PHP secara semula jadi mempunyai pelbagai fungsi aplikasi praktikal. Antaranya, fungsi untuk memproses imej adalah salah satunya. Pemprosesan imej adalah bahagian yang tidak dapat dielakkan dalam pembangunan web Daripada pemotongan dan penskalaan imej yang mudah kepada kesan khas imej yang kompleks, penapis, dll., fungsi pemprosesan imej diperlukan. Artikel ini akan memperkenalkan beberapa fungsi pemprosesan imej yang biasa digunakan dalam PHP.
1. Jenis imej dan perwakilan data
Dalam PHP, jenis imej biasa termasuk JPEG, GIF, PNG, dll. Jenis gambar yang berbeza mempunyai struktur data yang berbeza. Sebagai contoh, data imej JPEG adalah berdasarkan pekali transformasi DCT, manakala data imej PNG adalah berdasarkan nilai warna piksel. Dalam PHP, kita perlu menggunakan pustaka sambungan yang berbeza untuk menghuraikan dan memproses pelbagai jenis imej, terutamanya termasuk sambungan GD2 dan Imagick.
Sama ada menggunakan GD2 atau Imagick, kami perlu memuatkan data imej ke dalam memori untuk diproses. Oleh itu, apabila menggunakan fungsi pemprosesan imej, anda perlu menukar data imej kepada jenis data yang sepadan terlebih dahulu. Mengambil GD2 sebagai contoh, kaedah pemuatan data imej biasa adalah seperti berikut:
//加载JPEG图片 $image = imagecreatefromjpeg('image.jpg'); //加载PNG图片 $image = imagecreatefrompng('image.png'); //加载GIF图片 $image = imagecreatefromgif('image.gif');
Apabila menggunakan Imagick, data imej perlu dimuatkan dan diproses melalui objek Imagick. Contohnya:
//实例化Imagick对象并加载图片 $im = new Imagick('image.jpg'); //调整图片大小 $im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1); //输出图片 header('Content-Type: image/jpeg'); echo $im;
2. Operasi asas
Saiz semula imej ialah keperluan pemprosesan imej yang biasa, sama ada mengecil atau membesar. Dalam GD2, anda boleh menggunakan fungsi imagecopyresampled() untuk mencapai saiz semula imej. Fungsi ini akan menskalakan imej asal mengikut saiz yang ditentukan dan mengeluarkan data imej yang dilaraskan. Contohnya:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置目标图片尺寸 $dst_width = 320;//目标宽度 $dst_height = 240;//目标高度 //创建目标图片 $dst = imagecreatetruecolor($dst_width, $dst_height); //缩放图片 imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_width, $dst_height, imagesx($src), imagesy($src)); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($dst); //释放内存 imagedestroy($src); imagedestroy($dst);
Dalam Imagick, saiz semula imej dicapai melalui kaedah resizeImage(). Contohnya:
//打开原始图片 $im = new Imagick('image.jpg'); //设置目标图片尺寸 $im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1); //输出图片 header('Content-Type: image/jpeg'); echo $im;
Pemotongan Gambar biasanya digunakan untuk memangkas dan memintas gambar. Dalam GD2, anda boleh menggunakan fungsi imagecopy() untuk mencapai pemotongan imej. Fungsi ini akan menyalin piksel dalam kawasan yang ditentukan bagi imej asal kepada imej sasaran dan mengeluarkan data imej yang dipotong. Contohnya:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置目标图片尺寸 $dst_width = 320;//目标宽度 $dst_height = 240;//目标高度 //设置剪切位置和尺寸 $x = 100;//起始X坐标 $y = 100;//起始Y坐标 $width = 160;//剪切宽度 $height = 120;//剪切高度 //创建目标图片 $dst = imagecreatetruecolor($dst_width, $dst_height); //剪切图片 imagecopy($dst, $src, 0, 0, $x, $y, $width, $height); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($dst); //释放内存 imagedestroy($src); imagedestroy($dst);
Dalam Imagick, pemangkasan imej dilaksanakan melalui kaedah cropImage(). Contohnya:
//打开原始图片 $im = new Imagick('image.jpg'); //设置剪切位置和尺寸 $x = 100;//起始X坐标 $y = 100;//起始Y坐标 $width = 160;//剪切宽度 $height = 120;//剪切高度 //剪切图片 $im->cropImage($width, $height, $x, $y); //输出图片 header('Content-Type: image/jpeg'); echo $im;
3. Operasi lanjutan
Tanda air teks ialah kesan khas imej biasa, yang boleh digunakan untuk menjana lakaran kecil dan kelompok Ia sering digunakan dalam senario seperti memuat naik gambar. Dalam GD2, anda boleh menggunakan fungsi imagettftext() untuk melaksanakan tera air teks. Fungsi ini akan melukis teks yang ditentukan pada imej dan mengeluarkan data imej tera air. Contohnya:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置文本颜色 $color = imagecolorallocate($src, 255, 0, 0); //设置字体文件路径 $font = 'arial.ttf'; //设置字体大小 $size = 20; //设置水印文本 $text = 'www.example.com'; //计算文本位置 $bbox = imagettfbbox($size, 0, $font, $text); $x = imagesx($src) - $bbox[2] - 5; $y = imagesy($src) - $bbox[1] - 5; //添加水印 imagettftext($src, $size, 0, $x, $y, $color, $font, $text); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($src); //释放内存 imagedestroy($src);
Dalam Imagick, tera air teks dilaksanakan melalui kaedah annotateImage(). Contohnya:
//打开原始图片 $im = new Imagick('image.jpg'); //创建画笔对象 $draw = new ImagickDraw(); //设置字体路径和大小 $draw->setFont('arial.ttf'); $draw->setFontSize(20); //设置文本位置和颜色 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); $draw->setFillColor('red'); //添加水印文本 $draw->annotation(5, 5, 'www.example.com'); //绘制水印 $im->drawImage($draw); //输出图片 header('Content-Type: image/jpeg'); echo $im;
Kesan khas gambar ialah fokus dan kesukaran pemprosesan gambar, seperti kabur, mengasah, pelepasan dan kesan lain, yang memerlukan untuk diproses melalui algoritma. Dalam GD2, anda boleh menggunakan fungsi imagefilter() untuk melaksanakan kesan khas imej. Fungsi ini akan menapis imej asal dan mengeluarkan data imej selepas kesan khas. Contohnya:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //创建滤镜 $filter = IMG_FILTER_GRAYSCALE;//灰度滤镜 //应用滤镜 imagefilter($src, $filter); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($src); //释放内存 imagedestroy($src);
Dalam Imagick, kesan khas gambar dicapai melalui kaedah yang berbeza. Contohnya, gunakan kaedah gaussianBlurImage() untuk mencapai kesan kabur Gaussian:
//打开原始图片 $im = new Imagick('image.jpg'); //应用高斯模糊滤镜 $im->gaussianBlurImage(10, 5); //输出图片 header('Content-Type: image/jpeg'); echo $im;
4. Ringkasan
Artikel ini memperkenalkan fungsi pemprosesan imej biasa dalam PHP, termasuk operasi asas dan operasi lanjutan. Sama ada saiz semula imej, pemangkasan, penanda air teks atau kesan khas imej, semuanya boleh dicapai melalui dua perpustakaan sambungan GD2 dan Imagick. Apabila menggunakan fungsi ini, kita perlu memberi perhatian kepada perbezaan dalam jenis imej dan perwakilan data, dan memilih fungsi dan parameter yang sesuai mengikut keperluan sebenar. Pada masa yang sama, anda juga perlu memberi perhatian kepada isu seperti penggunaan memori dan prestasi untuk mengelakkan tekanan pada pelayan.
Atas ialah kandungan terperinci Fungsi pemprosesan imej untuk aplikasi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!