PHP图片加水印、压缩图片

做个笔记

<?php

/**
 * 该类用于给图片加文字水印,图片水印,压缩图片
 */
class Image
{
    private $image;

    private $info;

    //将图片保存到缓存中
    //构造函数
    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 __destruct()
    {
        imagedestroy($this->image);
    }

    //图片加图片水印
    public function watermark($source, $local, $alpha)
    {
        //获取水印图片的基本信息
        $info2 = getimagesize($source);
        $type2 = image_type_to_extension($info2[2], false);
        $fun2 = "imagecreatefrom{$type2}";
        $water = $fun2($source);
        //合并图片
        imagecopymerge($this->image, $water, $local['x'], $local['y'], 0, 0, $info2[0], $info2[1], $alpha);
        //销毁水印图片
        imagedestroy($water);
    }

    //给图片加文字水印
    public function fontmark($content, $font_url, $size, $color, $local, $angle)
    {
        //设置字体的颜色,透明度
        $col = imagecolorallocatealpha($this->image, $color[0], $color[1], $color[2], $color[3]);
        //写入文本
        imagettftext($this->image, $size, $angle, $local['x'], $local['y'], $col, $font_url, $content);
    }

    //压缩图片
    public function thumb($width, $height)
    {
        $image_thumb = imagecreatetruecolor($width, $height);
        //将原图复制到新建的真色彩图片上,并按照一定比例压缩
        imagecopyresampled($image_thumb, $this->image,
            0, 0, 0, 0,
            300, 300, $this->info['width'], $this->info['height']);
        imagedestroy($this->image);
        $this->image = $image_thumb;
    }

    //输出图片
    public function outPut()
    {
        header("Content-type:" . $this->info['mime']);
        $funs = "image{$this->info['type']}";
        $funs($this->image);
    }

    //保存图片
    public function save($name)
    {
        $funs = "image{$this->info['type']}";
        $funs($this->image, $name . '.' . $this->info['type']);
    }
}

?>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue中进行图片压缩和添水印的操作,你可以使用第三方库来实现。一个常用的库是`vue2-image-upload`。以下是一个简单的步骤来实现图片压缩和添水印的功能: 1. 首先,安装`vue2-image-upload`库。你可以使用npm或者yarn命令来安装: ``` npm install vue2-image-upload ``` 或者 ``` yarn add vue2-image-upload ``` 2. 在你的Vue组件中引入`vue2-image-upload`库,并在组件的`data`属性中定义一个`file`变量用于存储上传的图片文件。 ```vue <template> <div> <image-upload v-model="file"></image-upload> </div> </template> <script> import ImageUpload from 'vue2-image-upload'; export default { components: { ImageUpload }, data() { return { file: null }; } }; </script> ``` 3. 接下来,你可以使用`canvas`来进行图片压缩和添水印的操作。在你的Vue组件中,创建一个函数来处理图片上传和添水印的逻辑。 ```vue <script> import ImageUpload from 'vue2-image-upload'; export default { components: { ImageUpload }, data() { return { file: null }; }, methods: { compressAndWatermark() { const image = new Image(); image.src = URL.createObjectURL(this.file); image.onload = () => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); // 压缩图片到指定尺寸 const maxWidth = 500; // 设置压缩后的最大宽度 const ratio = maxWidth / image.width; canvas.width = maxWidth; canvas.height = image.height * ratio; ctx.drawImage(image, 0, 0, canvas.width, canvas.height); // 在压缩后的图片上添水印 ctx.font = '20px Arial'; ctx.fillStyle = 'rgba(255, 255, 255, 0.5)'; ctx.textAlign = 'center'; ctx.fillText('Watermark', canvas.width / 2, canvas.height / 2); // 将压缩后的图片转换为DataURL格式 const compressedImage = canvas.toDataURL('image/jpeg', 0.8); // 处理压缩后的图片,比如上传到服务器等操作 // ... }; } } }; </script> ``` 4. 最后,在你的Vue组件中调用`compressAndWatermark`函数来触发图片压缩和添水印的操作。 ```vue <template> <div> <image-upload v-model="file"></image-upload> <button @click="compressAndWatermark">压缩与添水印</button> </div> </template> ``` 通过以上步骤,你可以在Vue中实现图片压缩和添水印操作。记得根据你的具体需求调整代码中的参数和样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值