GD库图片裁剪指定形状解决办法(PHP GD库 海报)

news2024/10/2 14:31:09

需求描述:需要把图片裁剪成一个指定的平行四边形,目的是使用GD库,把裁剪后的图片放在底图上面,使最终合成的图片看起来是一个底图+平行四边形的样子

提示:可以结合本作者的其他文章,来生成一个定制化的海报(到此为止,定制化海报生成的所有知识点就写完了,大家可以自己看看那部分是自己需要,可以自己获取相应部分)

解决方案:第一步便是生成矩形的图片,但是经过测试后发现,无论是使用GD库还是使用PS,最终的图片还是一个矩形,并不能真正的实现把图片裁剪成为自己想要的形状,那么一种方案行不通那就换成另外一种方案,使用遮蔽物遮挡,把图片变成我们想要的形状,比如左边的三角形和右边的三角形,这两个形状就是使用imagefilledpolygon函数绘制填充的多边形来填充,最终获取到想要的图案

示例图:

//图片像素点

public function pixels(){

$imgpath = '地址';

$image = $this->createImageFromFile($imgpath);

//定位(左边渲染块)

$values = array(

0, 0, // Point 1 (x, y)

0, 420, // Point 2 (x, y)

100, 0 // Point 3 (x, y)

);

//获取颜色

$gr = imagecolorallocate($image, 228, 251, 255);

imagefilledpolygon($image, $values, 3, $gr);

//定位(右边渲染块)

$values = array(

420, 420,

420, 0,

320, 420

);

$gr = imagecolorallocate($image, 228, 251, 255);

imagefilledpolygon($image, $values, 3, $gr);

header('Content-type:image/png');

imagepng($image);

}

//获取图片类型,从字符串中的图像流新建一图像:非本地图片获取图像流生成本地图片

function createImageFromFile($file)

{

if (preg_match('/http(s)?:\/\//', $file)) {

$fileSuffix = $this->getNetworkImgType($file);

} else {

$fileSuffix = pathinfo($file, PATHINFO_EXTENSION);

}

if (!$fileSuffix) return false;

switch ($fileSuffix) {

case 'jpeg':

if (!strpos($file, 'qnimg.ruwii.com') && !strpos($file, 'upload')) {

// imagecreatefromstring:从字符串中的图像流新建一图像, 返回一个图像标识符,其表达了从给定字符串得来的图像

$theImage = @imagecreatefromstring($this->http_get_data($file));

} else {

$theImage = @imagecreatefromjpeg($file);

if (!$theImage) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

}

}

break;

case 'jpg':

if (!strpos($file, 'qnimg.ruwii.com') && !strpos($file, 'upload')) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

} else {

$theImage = @imagecreatefromjpeg($file);

if (!$theImage) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

}

}

break;

case 'png':

if (!strpos($file, 'qnimg.ruwii.com') && !strpos($file, 'upload')) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

} else {

$theImage = @imagecreatefrompng($file);

if (!$theImage) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

}

}

break;

case 'gif':

if (!strpos($file, 'qnimg.ruwii.com') && !strpos($file, 'upload')) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

} else {

$theImage = @imagecreatefromgif($file);

if (!$theImage) {

$theImage = @imagecreatefromstring($this->http_get_data($file));

}

}

break;

default:

$theImage = @imagecreatefromstring($this->http_get_data($file));

break;

}

return $theImage;

}

//获取图片类型

private function getNetworkImgType($url)

{

$ch = curl_init(); //初始化curl

curl_setopt($ch, CURLOPT_URL, $url); //设置需要获取的URL

curl_setopt($ch, CURLOPT_NOBODY, 1);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);//设置超时

curl_setopt($ch, CURLOPT_TIMEOUT, 3);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //支持https

curl_exec($ch);//执行curl会话

$http_code = curl_getinfo($ch);//获取curl连接资源句柄信息

curl_close($ch);//关闭资源连接

if ($http_code['http_code'] == 200) {

$theImgType = explode('/', $http_code['content_type']);

if ($theImgType[0] == 'image') {

return $theImgType[1];

} else {

return false;

}

} else {

return false;

}

}

//获取远程图片

function http_get_data($url)

{

$ch = curl_init();

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_URL, $url);

ob_start();

curl_exec($ch);

$return_content = ob_get_contents();

ob_end_clean();

curl_getinfo($ch, CURLINFO_HTTP_CODE);

return $return_content;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)

点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括: 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 (1)后台管理: 管理模块:管理员…

vscode编程小插件之Doxygen和Better Align

一、插件Doxygen:配置相应文件、函数说明项。 1、扩展商店,搜索Doxygen,如下图1,安装。 图1 2、设置项中,选择扩展设置,如图2 图2 3、配置版本、作者邮箱、作者名称、日期格式等等,如图3 4、定义函数后&…

DM8:DMDSC共享存储集群搭建-实例初始化(待完成)

DM8:DMDSC共享存储集群搭建-实例初始化1 环境介绍2 使用 DMASMCMD 工具初始化磁盘3 各个节点先后分别启动 dmcss3.1 EP733.2 EP744 各个节点先后分别启动 dmasmsvr 程序4.1 EP734.2 EP745 使用 dmasmtool 工具创建 DMASM 磁盘组(在一个节点执行)6 使用 dminit 初始化 DB 实例环…

STM32定时器实现红外接收与解码

1.NEC协议 红外遥控是一种比较常用的通讯方式,目前红外遥控的编码方式中,应用比较广泛的是NEC协议。NEC协议的特点如下: 载波频率为 38KHz8位地址和 8位指令长度地址和命令2次传输(确保可靠性)PWM 脉冲位置调制&#…

Shiro简介

介绍 ApacheShiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web集成、缓存等。借助Shiro 您可以快速轻松地保护任何应用程序一一从最小的移动应用程序到最大的 Web 和企业应用程序。 1.2:为什么要用 shiro 自2003年以…

GIS状态检测新技术——振动分析法

提示:唐老师好,我之前因为“阳”了,所以就没有参与汇报,给老师带来不便,请老师见谅。以此篇文章代替课堂汇报。 文章目录前言一、不同故障对应的振动频谱和故障特征量二、GIS设备振动特征估计1.GIS设备状态空间2.粒子滤…

npm install报错,node-sass: Command failed

报错如下: gyp verb check python checking for Python executable "python2" in the PATH gyp verb which failed Error: not found: python2 gyp verb which failed at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Ma…

《游戏学习》| 微信对话模拟生成器源码分析

简介微信对话生成器,是一款在线微信聊天对话制作的工具,它可以设置苹果或安卓状态栏,包括手机电量、手机时间等,还可以设置不同用户的角色,然后发送文字、语音、红包、转账等多种好玩的功能,可谓是一款娱乐…

es的使用与原理8 -- 初识es及es简单CRUD语法

为什么不能使用数据库做搜索? 1、比方说,每条记录的指定字段的文本,可能会很长,比如说“商品描述”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本…

vue处理一千张图片进行分页加载

vue处理一千张图片进行分页加载 开发过程中,如果后端一次性返回你1000多条图片或数据,那我们前端应该怎么用什么思路去更好的渲染呢? 第一种:我们可以使用分页加载 第二种:我们可以进行懒加载那我们用第一种方法使用…

Mysql 与 磁盘交互的过程

从之前的Mysql架构可以了解到,Mysql 客户端不是直接和磁盘打交道,我们在客户端输入的sql语句会被发送给服务端,服务端对sql语句进行解析、缓存等操作,然后再交由存储引擎去读写磁盘。这其实是从 C/S 的角度去了解Mysql。 站在OS的…

jvm如何判断对象已死?

在堆里面存放着各种各类的Java对象,垃圾收集器在对堆进行垃圾回收时,首要就是判断哪些对象还活着,哪些对象已经死去(即不被任何途径引用的对象)。引用计数器算法:引用计数器算法简单概括为:给对象添加一个引用计数器&a…

Java基础面试题——IO和多线程专题

文章目录1.介绍下进程和线程的关系2.说说Java中实现多线程的几种方法3.如何停止一个正在运行的线程4.介绍下线程中的常用方法1.start方法2.run方法3.getName方法4.优先级5.sleep方法6.isAlive7.join8.yield9.wait和notify/notifyAll5.介绍下线程的生命周期6.为什么wait, notify…

什么?30秒生成一个logo

logo 是徽标或者商标的英文说法。logo 承载着企业的无形资产,是企业综合信息传递的媒介。标志作为企业CIS战略的最主要部分,在企业形象传递过程中,是应用最广泛、出现频率最高,同时也是最关键的元素。通过形象的 logo 可以让消费者…

(考研湖科大教书匠计算机网络)第四章网络层-第三节5:IPv4地址的应用规划

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:定长的子网掩码FLSM二:变长的子网掩码VLSM本节对应视频如下 【计算机网络微课堂(有字幕无背景音乐版)】&#x…

笔记本电脑怎么连接无线网wifi?不同电脑系统的使用教程(2023最新)

现在越多人使用笔记本电脑,在我们的日常生活和工作中是很难离开它的。想要更快速地上网,我们都会选择连接无线网的wifi。有时笔记本电脑无法连接网络,你知道这是什么原因吗?笔记本电脑怎么连接无线网wifi?方法很简单&a…

.NET C# 世界日期格式转换为yyyyMMdd

本文分享了一个按照不同国家的语言生成相应时间格式的案例,有需要做国外网站或者多国语言网站的朋友可以参考一下。 本文在引用 【C# DateTime.ToString根据不同语言生成相应的时间格式】基础上做了一个Demo测试,旨在给更多有需要的人能刷到 官方示例&…

蓝奏云网盘下载链接无法打开的解决方法(详解 全)

🎈前言蓝奏云是一家国内的比较有良心的网盘提供商,提供有不限量的网盘空间,且不限制下载速度,免费用户只限制上传单文件小于100M的文件。算是比较有良心的。而且下载还不用登录才能下载(很多标称免费的网盘均需要下载者…

Python进阶篇(二)-- Django 深入模型

上一节提到了Django是基于MVC架构的Web框架,MVC架构追求的是“模型”和“视图”的解耦合。所谓“模型”说得更直白一些就是数据(的表示),所以通常也被称作“数据模型”。在实际的项目中,数据模型通常通过数据库实现持久…

阿里云部署SpringBoot项目

目录 步骤1:购买服务器(新用户免费试用一个月) 步骤2:查看服务器相关信息 ​编辑 步骤3:设置安全组 步骤4:远程连接 步骤5:使用FinalShell连接阿里云服务器 步骤6:阿里云服务器上安装JDK ​编辑 步骤7…