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

裁剪后图片如下

相关推荐
绵绵细雨中的乡音5 小时前
深入理解 ET 与 LT 模式及其在 Reactor 模型中的应用
服务器·网络·php
2501_916008896 小时前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
m0_736919106 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934736 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
玉梅小洋7 小时前
Windows 10 Android 构建配置指南
android·windows
黎雁·泠崖7 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472468 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
Libraeking8 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
TechWJ8 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly2024069 小时前
C++ 文件和流
开发语言