Rumah php教程 php手册 一个超级强大的图片加水印的类

一个超级强大的图片加水印的类

Jun 13, 2016 am 10:46 AM
individu tambah gambar berurusan dengan capai berkuasa tera air daripada baik hati

 

下午没事干,就写了个图片加水印处理的类,本类实现了给图片加文字水印,加图片水印,并且实现了透明度的功能,以供各位网友学习和交流 

 

/**  

 * 加水印类,支持文字、图片水印以及对透明度的设置、水印图片背景透明。  

 * @author  litx  date:2011-12-05下午3点于迈科龙快播研发中心

 */ 

class WaterMask 

    /**

     * 水印类型

     * @var int $waterType 0为文字水印 ;1为图片水印   

     */ 

    private $waterType = 1;  

    /**

     * 水印位置 类型

     * @var int $pos  默认为9(右下角)

     */ 

    private $pos = 9;  

    /**

     * 水印透明度 

     * @var int  $transparent  水印透明度(值越小越透明)

     */ 

    private $transparent = 20;  

    /**

     * 如果是文字水印,则需要加的水印文字

     * @var string $waterStr  默认值  (李铁雄个人作品集)

     */ 

    private $waterStr = '个人作品集';     

    /**

     * 文字字体大小   

     * @var int $fontSize  字体大小

     */ 

    private $fontSize = 14;  

    /**

     * 水印文字颜色(RGB)   

     * @var array $fontColor  水印文字颜色(RGB)   

     */ 

    private $fontColor = array ( 255, 255, 255 );  

    /**

     * 字体文件   

     * @var unknown_type

     */ 

    private $fontFile = 'AHGBold.ttf';  

    /**

     * 水印图片   

     * @var string $waterImg

     */ 

    private $waterImg = 'logo.png';  

    /**

     * 需要添加水印的图片   

     * @var string $srcImg

     */ 

    private $srcImg = '';  

    /**

     * 图片句柄   

     * @var string $im

     */ 

    private $im = '';  

    /**

     * 水印图片句柄   

     * @var string $water_im  

     */ 

    private $water_im = '';  

    /**

     * 图片信息   

     * @var array  $srcImg_info

     */ 

    private $srcImg_info = '';  

    /**

     * 水印图片信息   

     * @var array $waterImg_info  

     */ 

    private $waterImg_info = '';  

    /**

     * 水印文字宽度   

     * @var int $str_w  

     */ 

    private $str_w = '';  

    /**

     * 水印文字高度   

     * @var int $str_h  

     */ 

    private $str_h = '';  

    /**

     * 水印X坐标   

     * @var int $x

     */ 

    private $x = '';  

    /**

     * 水印y坐标   

     * @var int   $y

     */ 

    private $y = ''; 

    /**

     * 构造函数,通过传入需要加水印的源图片初始化源图片

     * @param string $img  需要加水印的源图片

     */ 

    public function __construct ($img) 

    {  

        if(file_exists($img)){//源文件存在 

            $this -> srcImg = $img ; 

        }else{//源文件不存在 

            echo '源文件'.$img.'不存在,请检查看文件路径是否正确'; 

            exit(); 

        } 

         

    } 

    /**

     * 获取需要添加水印的图片的信息,并载入图片

     */ 

    public  function imginfo () 

    {    

        $this -> srcImg_info = getimagesize($this -> srcImg); 

        var_dump($this -> srcImg_info);exit(); 

        switch ($this -> srcImg_info[2]) { 

            case 3 ://png 

                $this -> im = imagecreatefrompng($this -> srcImg); 

                break 1; 

            case 2 :  //  jpeg/jpg 

                $this -> im = imagecreatefromjpeg($this -> srcImg); 

                break 1; 

            case 1 :  //gif 

                $this -> im = imagecreatefromgif($this -> srcImg); 

                break 1; 

            default : 

                echo '源图片文件'. $this -> srcImg .'格式不正确,目前本函数只支持PNG、JPEG、GIF图片水印功能'; 

                exit(); 

        } 

    } 

    /**

     * 获取水印图片的信息,并载入图片

     */ 

    private function waterimginfo () 

    {  

        $this -> waterImg_info = getimagesize($this -> waterImg); 

        switch ($this -> waterImg_info[2]) { 

            case 3 : 

                $this -> water_im = imagecreatefrompng($this -> waterImg); 

                break 1; 

            case 2 : 

                $this -> water_im = imagecreatefromjpeg($this -> waterImg); 

                break 1; 

            case 1 : 

                $this -> water_im = imagecreatefromgif($this -> waterImg); 

                break 1; 

            default : 

                echo '源图片文件'. $this -> srcImg .'格式不正确,目前本函数只支持PNG、JPEG、GIF图片水印功能'; 

                exit(); 

        } 

    } 

    /**

     * 水印位置算法   

     */ 

    private function waterpos () 

    {  

         

        switch ($this -> pos) { 

            case 0 : //随机位置    

                $this -> x = rand(0, $this -> srcImg_info[0] - $this -> waterImg_info[0]); 

                $this -> y = rand(0, $this -> srcImg_info[1] - $this -> waterImg_info[1]); 

                break 1; 

            case 1 : //上左    

                $this -> x = 20; 

                $this -> y = 20; 

                break 1; 

            case 2 : //上中    

                $this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2; 

                $this -> y = 20; 

                break 1; 

            case 3 : //上右    

                $this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0]; 

                $this -> y = 20; 

                break 1; 

            case 4 : //中左    

                $this -> x = 20; 

                $this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2; 

                break 1; 

            case 5 : //中中    

                $this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2; 

                $this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2; 

                break 1; 

            case 6 : //中右    

                $this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20; 

                $this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2; 

                break 1; 

            case 7 : //下左    

                $this -> x = 20; 

                $this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20; 

                break 1; 

            case 8 : //下中    www.2cto.com

                $this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2; 

                $this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20; 

                break 1; 

            case 9 : //下右    

                $this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20; 

                $this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20; 

                break 1; 

            default : //下右    

                $this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20; 

                $this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20; 

                break 1; 

        } 

    } 

    /**

     * 加图片水印

     */ 

    private function waterimg () 

    { 

        if ($this -> srcImg_info[0] waterImg_info[0] || $this -> srcImg_info[1] waterImg_info[1]) { 

            echo '图片尺寸太小,无法加水印,请上传一张大图片'; 

            exit(); 

        } 

        //计算水印位置 

        $this->waterpos(); 

        $cut = imagecreatetruecolor($this -> waterImg_info[0], $this -> waterImg_info[1]); 

        imagecopy($cut, $this -> im, 0, 0, $this -> x, $this -> y, $this -> waterImg_info[0],  

        $this -> waterImg_info[1]); 

        $pct = $this -> transparent; 

        imagecopy($cut, $this -> water_im, 0, 0, 0, 0, $this -> waterImg_info[0],  

        $this -> waterImg_info[1]); 

        //将图片与水印图片合成 

        imagecopymerge($this -> im, $cut, $this -> x, $this -> y, 0, 0, $this -> waterImg_info[0], $this -> waterImg_info[1], $pct); 

    } 

    /**

     * 加文字水印

     */ 

    private function waterstr () 

    { 

        $rect = imagettfbbox($this -> fontSize, 0, $this -> fontFile, $this -> waterStr); 

        $w = abs($rect[2] - $rect[6]); 

        $h = abs($rect[3] - $rect[7]); 

        $fontHeight = $this -> fontSize; 

        $this -> water_im = imagecreatetruecolor($w, $h); 

        imagealphablending($this -> water_im, false); 

        imagesavealpha($this -> water_im, true); 

        $white_alpha = imagecolorallocatealpha($this -> water_im, 255, 255, 255, 127); 

        imagefill($this -> water_im, 0, 0, $white_alpha); 

        $color = imagecolorallocate($this -> water_im, $this -> fontColor[0], $this -> fontColor[1],  

        $this -> fontColor[2]); 

        imagettftext($this -> water_im, $this -> fontSize, 0, 0, $this -> fontSize, $color,  

        $this -> fontFile, $this -> waterStr); 

        $this -> waterImg_info = array ( 

            0 => $w, 1 => $h 

        ); 

        $this->waterimg(); 

    } 

    /**

     * 水印图片输出

     */ 

    public function output () 

    { 

        $this->imginfo(); 

        if ($this -> waterType == 0) { 

            $this->waterstr(); 

        } else { 

            $this->waterimginfo(); 

            $this->waterimg(); 

        } 

        switch ($this -> srcImg_info[2]) { 

            case 3 : 

                imagepng($this -> im, $this -> srcImg); 

                break 1; 

            case 2 : 

                imagejpeg($this -> im, $this -> srcImg); 

                break 1; 

            case 1 : 

                imagegif($this -> im, $this -> srcImg); 

                break 1; 

            default : 

                die('添加水印失败!'); 

                break; 

        } 

        //图片合成后的后续销毁处理 

        imagedestroy($this -> im); 

        imagedestroy($this -> water_im); 

    } 

 

使用方法示例:

//实例化对象  

$obj = new WaterMask('img/10451.jpg');        

//类型:0为文字水印、1为图片水印

$obj->waterType = 0;                      

//水印透明度,值 越小透明度越高

$obj->transparent = 15;                   

//水印文字 

//$obj->waterStr = '生日快乐';

//水印图片        

//$obj->waterImg = '';//水印图片

//文字字体大小 

$obj->fontSize = 14;                      

//水印文字颜色(RGB) 

$obj->fontColor = array(255,255,100);        

//字体文件 

$obj->fontFile = 'STCAIYUN.ttf';         

//输出水印图片文件覆盖到输入的图片文件 

$obj->output();      

 

使用方式比较简单,也很实用。

 

作者 ltx851201

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? Di manakah imej yang disimpan secara automatik semasa menyiarkan? Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? Di manakah imej yang disimpan secara automatik semasa menyiarkan? Mar 22, 2024 am 08:06 AM

Dengan perkembangan media sosial yang berterusan, Xiaohongshu telah menjadi platform untuk lebih ramai golongan muda berkongsi kehidupan mereka dan menemui perkara yang indah. Ramai pengguna bermasalah dengan isu autosimpan semasa menyiarkan imej. Jadi, bagaimana untuk menyelesaikan masalah ini? 1. Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? 1. Kosongkan cache Pertama, kita boleh cuba mengosongkan data cache Xiaohongshu. Langkah-langkahnya adalah seperti berikut: (1) Buka Xiaohongshu dan klik butang "Saya" di sudut kanan bawah (2) Pada halaman tengah peribadi, cari "Tetapan" dan klik padanya (3) Tatal ke bawah dan cari "; Kosongkan Cache". Klik OK. Selepas mengosongkan cache, masukkan semula Xiaohongshu dan cuba siarkan gambar untuk melihat sama ada masalah penjimatan automatik telah diselesaikan. 2. Kemas kini versi Xiaohongshu untuk memastikan bahawa Xiaohongshu anda

Bagaimana untuk menambah tera air pada Meitu Xiuxiu? Kongsi cara menambah tera air pada foto yang cantik! Bagaimana untuk menambah tera air pada Meitu Xiuxiu? Kongsi cara menambah tera air pada foto yang cantik! Mar 16, 2024 pm 09:55 PM

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

Bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Di manakah pintu masuk ke gambar di ruang komen? Bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Di manakah pintu masuk ke gambar di ruang komen? Mar 21, 2024 pm 09:12 PM

Dengan populariti video pendek Douyin, interaksi pengguna di kawasan komen menjadi lebih berwarna. Sesetengah pengguna ingin berkongsi imej dalam ulasan untuk meluahkan pendapat atau emosi mereka dengan lebih baik. Jadi, bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Artikel ini akan menjawab soalan ini secara terperinci untuk anda dan memberikan anda beberapa petua dan langkah berjaga-jaga yang berkaitan. 1. Bagaimana untuk menyiarkan gambar dalam komen Douyin? 1. Buka Douyin: Pertama, anda perlu membuka APP Douyin dan log masuk ke akaun anda. 2. Cari kawasan ulasan: Apabila menyemak imbas atau menyiarkan video pendek, cari tempat yang anda mahu mengulas dan klik butang "Ulasan". 3. Masukkan kandungan ulasan anda: Masukkan kandungan ulasan anda dalam ruangan komen. 4. Pilih untuk menghantar gambar: Dalam antara muka untuk memasukkan kandungan ulasan, anda akan melihat butang "gambar" atau butang "+", klik

Bagaimana untuk menetapkan tera air foto pada Xiaomi Mi 14? Bagaimana untuk menetapkan tera air foto pada Xiaomi Mi 14? Mar 18, 2024 am 11:00 AM

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.

Proses operasi hos perkhidmatan WIN10 yang menduduki terlalu banyak CPU Proses operasi hos perkhidmatan WIN10 yang menduduki terlalu banyak CPU Mar 27, 2024 pm 02:41 PM

1. Mula-mula, kita klik kanan ruang kosong bar tugas dan pilih pilihan [Task Manager], atau klik kanan logo mula, dan kemudian pilih pilihan [Task Manager]. 2. Dalam antara muka Pengurus Tugas yang dibuka, kami klik tab [Perkhidmatan] di hujung kanan. 3. Dalam tab [Perkhidmatan] yang dibuka, klik pilihan [Buka Perkhidmatan] di bawah. 4. Dalam tetingkap [Services] yang terbuka, klik kanan perkhidmatan [InternetConnectionSharing(ICS)], dan kemudian pilih pilihan [Properties]. 5. Dalam tetingkap sifat yang terbuka, tukar [Buka dengan] kepada [Disabled], klik [Apply] dan kemudian klik [OK]. 6. Klik logo mula, kemudian klik butang tutup, pilih [Mulakan Semula], dan selesaikan mula semula komputer.

Bagaimana untuk membuang tera air salinan penilaian di sudut kanan bawah win11 24H2 Petua untuk mengalih keluar salinan penilaian di sudut kanan bawah win11 Bagaimana untuk membuang tera air salinan penilaian di sudut kanan bawah win11 24H2 Petua untuk mengalih keluar salinan penilaian di sudut kanan bawah win11 Jun 01, 2024 pm 09:52 PM

Bagaimana untuk mengalih keluar teks salinan penilaian di sudut kanan bawah win1124H2? Apabila kita menggunakan sistem, kadangkala desktop akan memaparkan tera air lutsinar di sudut kanan bawah skrin Jadi bagaimana kita mengalih keluar tera air lutsinar ini? Pengguna boleh terus menggunakan perisian pihak ketiga untuk beroperasi. Biarkan tapak ini memperkenalkan dengan teliti kepada pengguna cara mengalih keluar tera air pada salinan penilaian win1124H2. Untuk mengalih keluar tera air pada salinan penilaian win1124H2, muat turun alat UniversalWatermarkDisabler Selepas menjalankannya, versi sistem semasa dan status tera air akan dipaparkan Jika "Sedia untuk pemasangan" dipaparkan dalam "Status", ia boleh dialih keluar.

Cara membuat gambar ppt muncul satu persatu Cara membuat gambar ppt muncul satu persatu Mar 25, 2024 pm 04:00 PM

Dalam PowerPoint, ia adalah teknik biasa untuk memaparkan gambar satu demi satu, yang boleh dicapai dengan menetapkan kesan animasi. Panduan ini memperincikan langkah untuk melaksanakan teknik ini, termasuk persediaan asas, sisipan imej, menambah animasi dan melaraskan susunan dan masa animasi. Selain itu, tetapan dan pelarasan lanjutan disediakan, seperti menggunakan pencetus, melaraskan kelajuan dan susunan animasi, dan pratonton kesan animasi. Dengan mengikuti langkah dan petua ini, pengguna boleh dengan mudah menyediakan gambar untuk muncul satu demi satu dalam PowerPoint, dengan itu meningkatkan kesan visual persembahan dan menarik perhatian penonton.

Pengenalan kepada kaedah menyunting tera air dengan WPS Pengenalan kepada kaedah menyunting tera air dengan WPS Mar 27, 2024 pm 02:06 PM

1. Kami menggunakan WPS untuk membuka dokumen Terdapat tanda air di dalamnya. Lihat ke bawah. 2. Cari tab Sisip dalam bar menu, pilih ikon pengepala dan pengaki di bawah tab ini, dan klik padanya dengan butang tetikus kiri. 3. Pada masa ini, teks pada halaman menjadi kelabu dan tidak boleh diedit, tetapi tera air di belakang teks boleh diedit pada masa ini. 4. Klik pada watermark, anda boleh melihat bahawa ini adalah watermark gambar, kerana terdapat beberapa petak kecil di sekeliling gambar, dan gambar boleh diedit pada masa ini. 5. Gunakan kekunci padam pada papan kekunci untuk memadam gambar, dan anda boleh melihat bahawa tera air telah hilang. 6. Klik dua kali tetikus pada halaman untuk keluar dari mod penyuntingan pengepala dan pengaki Teks pada halaman kembali kepada warna biasa dan boleh diedit, tetapi pada masa ini tera air pada halaman telah hilang. 7.

See all articles