php裁剪图片,并给图片加上水印

本次以裁剪四个图片为例,图片如下

代码如下

bash 复制代码
public function cutImg($imgUrl){
        try{
            // 读取原始图片
            $src_img = imagecreatefromjpeg($imgUrl);

            // 获取原始图片的宽度和高度
            $src_width = imagesx($src_img);
            $src_height = imagesy($src_img);

            // 计算每个部分的宽度和高度
            $part_width = $src_width / 2;
            $part_height = $src_height / 2;

            // 创建4个新的图片
            $part1_img = imagecreatetruecolor($part_width, $part_height);
            $part2_img = imagecreatetruecolor($part_width, $part_height);
            $part3_img = imagecreatetruecolor($part_width, $part_height);
            $part4_img = imagecreatetruecolor($part_width, $part_height);

            // 将原始图片的指定部分复制到新的图片中
            imagecopyresampled($part1_img, $src_img, 0, 0, 0, 0, $part_width, $part_height, $src_width / 2, $src_height / 2);
            imagecopyresampled($part2_img, $src_img, 0, 0, $src_width / 2, 0, $part_width, $part_height, $src_width / 2, $src_height / 2);
            imagecopyresampled($part3_img, $src_img, 0, 0, 0, $src_height / 2, $part_width, $part_height, $src_width / 2, $src_height / 2);
            imagecopyresampled($part4_img, $src_img, 0, 0, $src_width / 2, $src_height / 2, $part_width, $part_height, $src_width / 2, $src_height / 2);

            //添加水印
            $text = '用积分可下载原图';
            $textAi = 'AI生图';
            $font = __DIR__ . '/../../../public/static/font/FangZhengShuSongJianTi-1.ttf';  // 字体文件的路径
            $font_size = 20;  // 字体大小
            $font_color = imagecolorallocatealpha($part1_img, 255, 255, 255, 0);  // 字体颜色,这里设置为白色
            // 设置水印文字的位置和边距
//            $margin_left = ($thumbnail_width - mb_strlen($text)) / 2;  // 水印距离右边界的距离
            $textBoundingBox = imagettfbbox($font_size, 0, $font, $text);
            $textWidth = $textBoundingBox[2] - $textBoundingBox[0];
            $margin_left = ($part_width - $textWidth) / 2;  // 水印距离右边界的距离
            $margin_bottom = $part_height / 2;  // 水印距离底部边界的距离

            // 设置文字倾斜角度(以度为单位,逆时针方向为正)
            $text_angle = 0;

            //添加中间水印
            imagettftext($part1_img, $font_size, $text_angle, $margin_left, $margin_bottom, $font_color, $font, $text);
            imagettftext($part2_img, $font_size, $text_angle, $margin_left, $margin_bottom, $font_color, $font, $text);
            imagettftext($part3_img, $font_size, $text_angle, $margin_left, $margin_bottom, $font_color, $font, $text);
            imagettftext($part4_img, $font_size, $text_angle, $margin_left, $margin_bottom, $font_color, $font, $text);

            // 保存4张新生成的图片
            imagejpeg($part1_img, str_replace('.jpg','_sy_1.jpg',$imgUrl),70);
            imagejpeg($part2_img, str_replace('.jpg','_sy_2.jpg',$imgUrl),70);
            imagejpeg($part3_img, str_replace('.jpg','_sy_3.jpg',$imgUrl),70);
            imagejpeg($part4_img, str_replace('.jpg','_sy_4.jpg',$imgUrl),70);

            // 释放内存
            imagedestroy($src_img);
            imagedestroy($part1_img);
            imagedestroy($part2_img);
            imagedestroy($part3_img);
            imagedestroy($part4_img);


            return 1;
        } catch (\ErrorException $e){
            return -1;
        }
    }

裁剪后图片如下

相关推荐
WaaTong几秒前
Java反射
java·开发语言·反射
Troc_wangpeng2 分钟前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习
努力的家伙是不讨厌的4 分钟前
解析json导出csv或者直接入库
开发语言·python·json
萌面小侠Plus4 分钟前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机
慢慢成长的码农4 分钟前
Android Profiler 内存分析
android
大风起兮云飞扬丶5 分钟前
Android——多线程、线程通信、handler机制
android
L725611 分钟前
Android的Handler
android
清风徐来辽11 分钟前
Android HandlerThread 基础
android
Envyᥫᩣ17 分钟前
C#语言:从入门到精通
开发语言·c#
童先生38 分钟前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go