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;
        }
    }

裁剪后图片如下

相关推荐
未来之窗软件服务8 分钟前
幽冥大陆(四十九)PHP打造Java的Jar实践——东方仙盟筑基期
java·php·jar·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟一体化
4Forsee16 分钟前
【Android】动态操作 Window 的背后机制
android·java·前端
martian66516 分钟前
深入解析C++驱动开发实战:优化高效稳定的驱动应用
开发语言·c++·驱动开发
HappRobot18 分钟前
python类和对象
开发语言·python
鸡吃丸子29 分钟前
React Native入门详解
开发语言·前端·javascript·react native·react.js
盼哥PyAI实验室32 分钟前
Python YAML配置管理:12306项目的灵活配置方案
开发语言·python
漂亮的小碎步丶33 分钟前
【启】Java中高级开发51天闭关冲刺计划(聚焦运营商/ToB领域)
java·开发语言
华锋202235 分钟前
2025.12首次体验 arkui-x 跨平台开发库
android
hd51cc40 分钟前
MFC运行时
开发语言·mfc
wniuniu_43 分钟前
ceph一些细节处理
开发语言·ceph