PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF,imagick水印
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF,imagick水印
给骨头系统开发的图像库的 imagick 部分 ,支持 gif , 完美支持裁切、生成缩略图、添加水印 。
支持按方位生成缩略图像, 如:
// 把左上角优先 $image->resize_to(100, 100, 'north_west'); // 右边优先 $image->resize_to(100, 100, 'east'); ...
更多参数看源代码
原图
效果图:
调用方式:
include 'imagick.class.php'; $image = new lib_image_imagick(); $image->open('a.gif'); $image->resize_to(100, 100, 'scale_fill'); $image->add_text('1024i.com', 10, 20); $image->add_watermark('1024i.gif', 10, 50); $image->save_to('x.gif');
imagick.class.php
<?php /* @版本日期: 版本日期: 2012年1月18日 @著作权所有: 1024 intelligence ( http://www.1024i.com ) 获得使用本类库的许可, 您必须保留著作权声明信息. 报告漏洞,意见或建议, 请联系 Lou Barnes(iua1024@gmail.com) */ class lib_image_imagick { private $image = null; private $type = null; // 构造函数 public function __construct(){} // 析构函数 public function __destruct() { if($this->image!==null) $this->image->destroy(); } // 载入图像 public function open($path) { $this->image = new Imagick( $path ); if($this->image) { $this->type = strtolower($this->image->getImageFormat()); } return $this->image; } public function crop($x=0, $y=0, $width=null, $height=null) { if($width==null) $width = $this->image->getImageWidth()-$x; if($height==null) $height = $this->image->getImageHeight()-$y; if($width<=0 || $height<=0) return; if($this->type=='gif') { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->cropImage($width, $height, $x, $y); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; } else { $this->image->cropImage($width, $height, $x, $y); } } /* * 更改图像大小 $fit: 适应大小方式 'force': 把图片强制变形成 $width X $height 大小 'scale': 按比例在安全框 $width X $height 内缩放图片, 输出缩放后图像大小 不完全等于 $width X $height 'scale_fill': 按比例在安全框 $width X $height 内缩放图片,安全框内没有像素的地方填充色, 使用此参数时可设置背景填充色 $bg_color = array(255,255,255)(红,绿,蓝, 透明度) 透明度(0不透明-127完全透明)) 其它: 智能模能 缩放图像并载取图像的中间部分 $width X $height 像素大小 $fit = 'force','scale','scale_fill' 时: 输出完整图像 $fit = 图像方位值 时, 输出指定位置部分图像 字母与图像的对应关系如下: north_west north north_east west center east south_west south south_east */ public function resize_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) ) { switch($fit) { case 'force': if($this->type=='gif') { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, false ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, false ); } break; case 'scale': if($this->type=='gif') { $image = $this->image; $images = $image->coalesceImages(); $canvas = new Imagick(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, true ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, true ); } break; case 'scale_fill': $size = $this->image->getImagePage(); $src_width = $size['width']; $src_height = $size['height']; $x = 0; $y = 0; $dst_width = $width; $dst_height = $height; if($src_width*$height > $src_height*$width) { $dst_height = intval($width*$src_height/$src_width); $y = intval( ($height-$dst_height)/2 ); } else { $dst_width = intval($height*$src_width/$src_height); $x = intval( ($width-$dst_width)/2 ); } $image = $this->image; $canvas = new Imagick(); $color = 'rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','.$fill_color[3].')'; if($this->type=='gif') { $images = $image->coalesceImages(); foreach($images as $frame) { $frame->thumbnailImage( $width, $height, true ); $draw = new ImagickDraw(); $draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame); $img = new Imagick(); $img->newImage($width, $height, $color, 'gif'); $img->drawImage($draw); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } } else { $image->thumbnailImage( $width, $height, true ); $draw = new ImagickDraw(); $draw->composite($image->getImageCompose(), $x, $y, $dst_width, $dst_height, $image); $canvas->newImage($width, $height, $color, $this->get_type() ); $canvas->drawImage($draw); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; break; default: $size = $this->image->getImagePage(); $src_width = $size['width']; $src_height = $size['height']; $crop_x = 0; $crop_y = 0; $crop_w = $src_width; $crop_h = $src_height; if($src_width*$height > $src_height*$width) { $crop_w = intval($src_height*$width/$height); } else { $crop_h = intval($src_width*$height/$width); } switch($fit) { case 'north_west': $crop_x = 0; $crop_y = 0; break; case 'north': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = 0; break; case 'north_east': $crop_x = $src_width-$crop_w; $crop_y = 0; break; case 'west': $crop_x = 0; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'center': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'east': $crop_x = $src_width-$crop_w; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'south_west': $crop_x = 0; $crop_y = $src_height-$crop_h; break; case 'south': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = $src_height-$crop_h; break; case 'south_east': $crop_x = $src_width-$crop_w; $crop_y = $src_height-$crop_h; break; default: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); } $image = $this->image; $canvas = new Imagick(); if($this->type=='gif') { $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->cropImage($crop_w, $crop_h, $crop_x, $crop_y); $img->thumbnailImage( $width, $height, true ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } } else { $image->cropImage($crop_w, $crop_h, $crop_x, $crop_y); $image->thumbnailImage( $width, $height, true ); $canvas->addImage( $image ); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; } } // 添加水印图片 public function add_watermark($path, $x = 0, $y = 0) { $watermark = new Imagick($path); $draw = new ImagickDraw(); $draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark); if($this->type=='gif') { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($image as $frame) { $img = new Imagick(); $img->readImageBlob($frame); $img->drawImage($draw); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->drawImage($draw); } } // 添加水印文字 public function add_text($text, $x = 0 , $y = 0, $angle=0, $style=array()) { $draw = new ImagickDraw(); if(isset($style['font'])) $draw->setFont($style['font']); if(isset($style['font_size'])) $draw->setFontSize($style['font_size']); if(isset($style['fill_color'])) $draw->setFillColor($style['fill_color']); if(isset($style['under_color'])) $draw->setTextUnderColor($style['under_color']); if($this->type=='gif') { foreach($this->image as $frame) { $frame->annotateImage($draw, $x, $y, $angle, $text); } } else { $this->image->annotateImage($draw, $x, $y, $angle, $text); } } // 保存到指定路径 public function save_to( $path ) { if($this->type=='gif') { $this->image->writeImages($path, true); } else { $this->image->writeImage($path); } } // 输出图像 public function output($header = true) { if($header) header('Content-type: '.$this->type); echo $this->image->getImagesBlob(); } public function get_width() { $size = $this->image->getImagePage(); return $size['width']; } public function get_height() { $size = $this->image->getImagePage(); return $size['height']; } // 设置图像类型, 默认与源类型一致 public function set_type( $type='png' ) { $this->type = $type; $this->image->setImageFormat( $type ); } // 获取源图像类型 public function get_type() { return $this->type; } // 当前对象是否为图片 public function is_image() { if( $this->image ) return true; else return false; } public function thumbnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 生成缩略图 $fit为真时将保持比例并在安全框 $width X $height 内生成缩略图片 /* 添加一个边框 $width: 左右边框宽度 $height: 上下边框宽度 $color: 颜色: RGB 颜色 'rgb(255,0,0)' 或 16进制颜色 '#FF0000' 或颜色单词 'white'/'red'... */ public function border($width, $height, $color='rgb(220, 220, 220)') { $color=new ImagickPixel(); $color->setColor($color); $this->image->borderImage($color, $width, $height); } public function blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // 模糊 public function gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // 高斯模糊 public function motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // 运动模糊 public function radial_blur($radius){$this->image->radialBlurImage($radius);} // 径向模糊 public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // 添加噪点 public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // 调整色阶 public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 调整亮度、饱和度、色调 public function charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // 素描 public function oil_paint($radius){$this->image->oilPaintImage($radius);} // 油画效果 public function flop(){$this->image->flopImage();} // 水平翻转 public function flip(){$this->image->flipImage();} // 垂直翻转 }
您可能感兴趣的文章:
- PHP使用imagick读取PDF生成png缩略图的两种方法
- php使用imagick模块实现图片缩放、裁剪、压缩示例
- PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
- PHP中使用Imagick读取pdf并生成png缩略图实例
- PHP中使用imagick生成PSD文件缩略图教程
- PHP利用imagick生成组合缩略图

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Artikel ini akan memperkenalkan cara untuk mematikan fungsi lakaran kenit yang dipaparkan apabila tetikus menggerakkan ikon bar tugas dalam sistem Win11. Ciri ini dihidupkan secara lalai dan memaparkan lakaran kecil tetingkap semasa aplikasi apabila pengguna menuding tetikus pada ikon aplikasi pada bar tugas. Walau bagaimanapun, sesetengah pengguna mungkin mendapati ciri ini kurang berguna atau mengganggu pengalaman mereka dan ingin mematikannya. Lakaran kecil bar tugas boleh menjadi menyeronokkan, tetapi ia juga boleh mengganggu atau menjengkelkan. Memandangkan kekerapan anda menuding di atas kawasan ini, anda mungkin telah menutup tetingkap penting secara tidak sengaja beberapa kali. Kelemahan lain ialah ia menggunakan lebih banyak sumber sistem, jadi jika anda telah mencari cara untuk menjadi lebih cekap sumber, kami akan menunjukkan kepada anda cara untuk melumpuhkannya. tetapi

Ingin tahu cara menambah tera air pada MeituXiuXiu? Meitu Xiuxiu ialah perisian penyuntingan foto yang sangat mudah digunakan Ia menyediakan fungsi seperti memotong gambar dan meletakkannya pada gambar lain, menukar saiz gambar mengikut kb, mengalih keluar tera air, menukar warna latar belakang foto ID, dan menambah masa. , tera air tarikh dan lokasi ke skrin penuh Bantu pengguna menyelesaikan pengeluaran gambar dengan cepat. Sesetengah pengguna telah mencipta gambar mereka sendiri dan tidak mahu orang lain mencurinya. Mereka mahu menutupnya dengan tera air mereka sendiri, tetapi mereka tidak tahu cara melakukannya? Editor kini akan berkongsi dengan anda cara menambah tera air pada gambar yang cantik! Jika anda suka, datang dan muat turunnya! 1. Bagaimana untuk menambah tera air pada Meitu Xiuxiu? Kongsi cara menambah tera air pada foto yang cantik! 1. Buka versi 2023 Meitu Xiu Xiu yang dimuat turun dari tapak ini. Versi Meitu Xiu Xiu 2023 Kategori: Penggambaran dan pengindahan Muat Turun Meitu Xiu Xiu 2023 versi ialah perisian pengindahan dan pengeditan gambar yang kaya dengan ciri

Mengalih keluar tera air ialah alat yang berguna dalam Pengimbas perisian Sesetengah pengguna tidak pasti cara mengalih keluar tera air dalam Pengimbas Anda boleh mengklik Alih Keluar Tera Air dalam Edit PDF pada antara muka simpan. Seterusnya, editor akan menerangkan Pengguna membawakan pengenalan kepada kami bagaimana untuk membuang tera air Jika anda berminat, datang dan lihat! Tutorial penggunaan Scanner King Bagaimana untuk membuang tera air dengan Scanner King Jawapan: Anda boleh klik pada antara muka simpan untuk mengedit penyingkiran tera air dalam PDF: 1. Masukkan perisian dan klik ikon [Kamera]. 2. Ambil gambar dan imbas dokumen yang perlu ditanda air. 3. Klik [→] untuk meneruskan ke langkah seterusnya. 4. Selepas selesai menyunting, klik [✓]. 5. Klik [Edit PDF]. 6. Pilih [Remove Watermark] di bawah.

Bingkai sebaris dipanggil iframe dalam HTML. Label menentukan kawasan segi empat tepat dalam kandungan di mana penyemak imbas boleh memaparkan dokumen yang berbeza dengan bar skrol dan sempadan. Untuk membenamkan dokumen lain dalam dokumen HTML semasa, gunakan bingkai sebaris. Rujukan kepada elemen boleh ditentukan menggunakan atribut nama HTMLiframe. Dalam JavaScript, rujukan kepada elemen juga dibuat menggunakan atribut nama. Iframe pada asasnya digunakan untuk memaparkan halaman web dalam halaman web yang sedang dipaparkan. URL dokumen yang mengandungi iframe ditentukan menggunakan atribut "src". Sintaks Berikut ialah sintaks HTML <iframesrc="URL"title="d

Buka klip dan pilih templat Selepas mengedit video, klik Eksport, klik Simpan dan kongsi tanpa tera air. Model tutorial yang berkenaan: iPhone13 Sistem: iOS15.3.1 Versi: Cutting 6.8.0 Analysis 1 Open Cutting dan pilih templat pemotongan. 2. Selepas mengklik untuk membuka templat, klik pilihan potong gaya yang sama di sudut kanan bawah. 3Pilih segmen isian foto daripada album dan klik Seterusnya. 4Cara mengklik pilihan eksport di penjuru kanan sebelah atas halaman. 5Akhir sekali, klik Simpan dan Kongsi tanpa tera air. Tambahan: Apakah jenis perisian Cutting? 1 Cutting ialah perisian penyuntingan video yang mempunyai fungsi penyuntingan yang komprehensif, boleh menukar kelajuan, mempunyai penapis dan kesan kecantikan, dan mempunyai sumber perpustakaan muzik yang kaya. Mulai Februari 2021, keratan akan disokong pada telefon mudah alih, Pad dan komputer Mac.

Bagaimana untuk membuang tera air daripada video dalam Wink? Terdapat alat untuk membuang tera air daripada video dalam winkAPP, tetapi kebanyakan rakan tidak tahu bagaimana untuk membuang tera air daripada video dalam Wink dibawa oleh editor Teks tutorial, pengguna yang berminat datang dan lihat! Cara membuang tera air video dalam Wink 1. Buka APP wink dahulu dan pilih fungsi [Remove Watermark] di kawasan halaman utama 2. Kemudian pilih video yang ingin anda keluarkan watermark dalam album 3. Kemudian pilih video dan klik sudut kanan atas selepas mengedit video [√];4 Akhir sekali, klik [Pencetakan satu klik] seperti yang ditunjukkan dalam rajah di bawah dan kemudian klik [Proses].

Xiaomi Mi 14 Ultra ialah model baharu dengan prestasi dan konfigurasi yang sangat baik Telefon bimbit ini juga menggunakan reka bentuk penampilan yang lebih tinggi dan sangat dikenali ramai pengguna yang ingin membelinya 14 Ultra. , editor laman web ini akan memperkenalkannya kepada anda di bawah! Bagaimana untuk membuang tera air dari Xiaomi 14Ultra? 1. Buka aplikasi kamera: Cari dan buka aplikasi kamera prapasang pada Xiaomi 14. 2. Masukkan menu Tetapan: Ketik sudut kanan bawah atau sudut kiri bawah skrin (bergantung pada versi yang anda gunakan) untuk memaparkan butang Pilihan Tambahan. Kemudian, pilih "Tetapan" dalam menu pop timbul. 3. Matikan pilihan tera air: Dalam menu tetapan, anda akan melihat pelbagai pilihan dan parameter. Tatal ke bawah sehingga anda menemui pilihan "Watermark".

Untuk menjadikan foto yang diambil lebih diperibadikan dan unik, Xiaomi Mi 14 menyediakan tetapan tera air foto. Dengan menetapkan tera air foto, pengguna boleh menambah corak, teks dan logo pada foto yang mereka ambil, supaya setiap foto boleh merakam momen dan kenangan berharga dengan lebih baik. Seterusnya, kami akan memperkenalkan cara untuk menetapkan tera air foto dalam Xiaomi 14 untuk menjadikan foto anda lebih diperibadikan dan jelas. Bagaimana untuk menetapkan tera air foto pada Xiaomi Mi 14? 1. Mula-mula klik "Kamera". 2. Kemudian klik "Tetapan". 3. Kemudian cari tera air, dan kemudian anda boleh mula merakam.
