zoukankan      html  css  js  c++  java
  • php 使用GD库压缩图片,添加文字图片水印

    先上一个工具类,提供了压缩,添加文字、图片水印等方法:

    image.class.php

    <?php
        class Image {
    
            private $info;
            private $image;
    
            public function __construct($src) {
                $info = getimagesize($src);
                $this -> info = array(
                    "width" => $info[0],
                    "height" => $info[1],
                    "type" => image_type_to_extension($info[2], false),
                    "mime" => $info['mime']
                );
                $fun = "imagecreatefrom{$this->info['type']}";
                $this -> image = $fun($src);
            }
    
            public function thumb($width, $height) {
                $imageThumb = imagecreatetruecolor($width, $height);
                imagecopyresampled(
                    $imageThumb,
                    $this -> image,
                    0,
                    0,
                    0,
                    0,
                    $width,
                    $height,
                    $this -> info["width"],
                    $this -> info["height"]);
                imagedestroy($this -> image);
                $this -> image = $imageThumb;
            }
    
            public function waterMarkText($text, $fontPath, $fontSize, $color, $x, $y, $angle) {
                $color = imagecolorallocatealpha(
                    $this -> image,
                    $color[0],
                    $color[1],
                    $color[2],
                    $color[3]);
                imagettftext(
                    $this -> image,
                    $fontSize,
                    $angle,
                    $x,
                    $y,
                    $color,
                    $fontPath,
                    $text);
            }
    
            public function waterMarkImage($source, $x, $y, $alpha) {
                $markInfo = getimagesize($source);
                //3、获取水印图片类型
                $markType = image_type_to_extension($markInfo[2], false);
                //4、在内存创建图像
                $markCreateImageFunc = "imagecreatefrom{$markType}";
                //5、把水印图片复制到内存中
                $water = $markCreateImageFunc($source);
    
                //特别处理,设置透明
                $color=imagecolorallocate($water,255,255,255);
                imagefill($water,0,0,$color);
                imagecolortransparent($water,$color);
    
                //6、合并图片
                imagecopymerge($this -> image, $water, $x, $y, 0, 0, $markInfo[0], $markInfo[1], $alpha);
            }
    
            public function show() {
                header("Content-type:" . $this -> info['mime']);
                $outputfunc = "image{$this -> info['type']}";
                $outputfunc($this -> image);
            }
    
            public function save($newname) {
                $outputfunc = "image{$this -> info['type']}";
                $outputfunc($this -> image, $newname . '.' . $this -> info['type']);
            }
    
            public function __destruct() {
                imagedestroy($this -> image);
            }
    
    
        }
    ?>
    

    调用:

    <?php
        require "image.class.php";
        $src = "aeroplane.jpg";
        $image = new Image($src);
    
    
        $source = "logo.png";
        $image -> waterMarkImage($source, 0, 0, 30);
        $image -> thumb(500, 500);
    
        $fontPath = "STXINGKA.ttf";
        $text = "文字图片水印";
        $image -> waterMarkText(
            $text,
            $fontPath,
            60,
            array(255, 255, 255, 20),
            10,
            240,
            0);
    
        $image -> show();
        $image -> save("image_mark");
    ?>
    

    上面用到的图片和字体都跟代码文件在同一个目录下。

    效果:
    图片描述

  • 相关阅读:
    test
    在linux下安装tesseract-ocr
    xpath获取同级节点
    RobotFrameWork系统关键字之断言
    redis
    mybatis
    mysql事务隔离级别
    努力努力再努力
    不同分辨率下,页面如何自适应?
    市场上有多少种分辨率?
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/php-watermark-library.html
Copyright © 2011-2022 走看看