[PHP GD Study]我的世界皮肤转迷你世界

news/2024/11/13 13:56:28/文章来源:https://www.cnblogs.com/meny233/p/18370458

涉及图片旋转、放大、复制
目前仅实现了头部的复制

准备工作:

  1. 迷你世界皮肤底图(命名为miniw.png):
    image
  2. 我的世界皮肤:
    image

源代码:

⚠AI生成

<?php
// 设置上传文件的目标目录
$target_dir = "uploads/";
// 创建目标目录如果不存在
if (!file_exists($target_dir)) {mkdir($target_dir, 0777, true);
}
// 设置上传文件的名称
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);// 检查是否有文件被上传
if (isset($_POST["submit"])) {// 检查文件是否已上传且不是错误上传if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {// 加载图片$image = imagecreatefrompng($target_file);// 加载 miniw.png 文件$miniwFile = 'miniw.png';$miniwImage = imagecreatefrompng($miniwFile);// 指定头部在 miniw.png 中的位置$headX = 490;$headY = 600;// 提取头部区域$headWidth = 8;$headHeight = 8;$originalHeadX = 8;$originalHeadY = 8;$scaleFactor = 50;// 创建一个新的图像来存储头部$headImage = imagecreatetruecolor($headWidth, $headHeight);$rightheadImage = imagecreatetruecolor($headWidth, $headHeight);$topheadImage = imagecreatetruecolor($headWidth, $headHeight);$leftheadImage = imagecreatetruecolor($headWidth, $headHeight);$bottomheadImage = imagecreatetruecolor($headWidth, $headHeight);$backheadImage = imagecreatetruecolor($headWidth, $headHeight); // 新增// 复制头部区域到新图像imagecopy($headImage, $image, 0, 0, $originalHeadX, $originalHeadY, $headWidth, $headHeight);imagecopy($rightheadImage, $image, 0, 0, $originalHeadX-8, $originalHeadY, $headWidth, $headHeight);imagecopy($topheadImage, $image, 0, 0, $originalHeadX, $originalHeadY-8, $headWidth, $headHeight);imagecopy($leftheadImage, $image, 0, 0, $originalHeadX+8, $originalHeadY, $headWidth, $headHeight);imagecopy($bottomheadImage, $image, 0, 0, $originalHeadX+8, $originalHeadY-8, $headWidth, $headHeight);imagecopy($backheadImage, $image, 0, 0, $originalHeadX + 8 + 8, $originalHeadY, $headWidth, $headHeight); // 新增// 创建放大后的头部图像$scaledHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor);$scaledRightHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor);$scaledTopHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor);$scaledLeftHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor);$scaledBottomHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor);$scaledBackHeadImage = imagecreatetruecolor($headWidth * $scaleFactor, $headHeight * $scaleFactor); // 新增// 放大头部图像imagecopyresampled($scaledHeadImage, $headImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight);imagecopyresampled($scaledRightHeadImage, $rightheadImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight);imagecopyresampled($scaledTopHeadImage, $topheadImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight);imagecopyresampled($scaledLeftHeadImage, $leftheadImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight);imagecopyresampled($scaledBottomHeadImage, $bottomheadImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight);imagecopyresampled($scaledBackHeadImage, $backheadImage, 0, 0, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor, $headWidth, $headHeight); // 新增// 将头部图像粘贴到 miniw.png 上imagecopy($miniwImage, $scaledHeadImage, $headX, $headY, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor);imagecopy($miniwImage, $scaledRightHeadImage, $headX - $headWidth * $scaleFactor, $headY, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor);imagecopy($miniwImage, $scaledTopHeadImage, $headX, $headY-$headHeight * $scaleFactor, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor);imagecopy($miniwImage, $scaledLeftHeadImage, $headX+$headWidth * $scaleFactor, $headY, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor);imagecopy($miniwImage, $scaledBottomHeadImage, $headX, $headY+$headHeight * $scaleFactor, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor);imagecopy($miniwImage, $scaledBackHeadImage, $headX + $headHeight * $scaleFactor * 2, $headY, 0, 0, $headWidth * $scaleFactor, $headHeight * $scaleFactor); // 新增// 输出最终图像header('Content-Type: image/png');imagepng($miniwImage);imagedestroy($image);imagedestroy($headImage);imagedestroy($rightheadImage);imagedestroy($topheadImage);imagedestroy($leftheadImage);imagedestroy($bottomheadImage);imagedestroy($backheadImage); // 新增imagedestroy($scaledHeadImage);imagedestroy($scaledRightHeadImage);imagedestroy($scaledTopHeadImage);imagedestroy($scaledLeftHeadImage);imagedestroy($scaledBottomHeadImage);imagedestroy($scaledBackHeadImage); // 新增imagedestroy($miniwImage);// 删除上传的文件unlink($target_file);} else {echo "Sorry, there was an error uploading your file.";}
}// HTML 表单用于上传文件
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST" enctype="multipart/form-data">Select Minecraft skin to upload:<input type="file" name="fileToUpload" id="fileToUpload"><input type="submit" value="Upload Skin" name="submit">
</form>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合同等文档的比对实现测试

记录一下合同等文档的比对测试,以下是实现docx格式与txt格式的内容对比结果图,其中图1为docx格式,是房屋租赁合同的内容对比结果;图2是纯文本txt格式的内容对比结果。图1图2

SourceTree离线安装

需求:要求在内网环境开发,连不上外网,安装sourceTree又是需要联网的,这就是尴尬了又不想用命令,已经习惯了sourceTree. 不说废话,上干货: 注意!!!一定按照步骤来,否则不会生效的。 注意!!!一定按照步骤来,否则不会生效的。 注意!!!一定按照步骤来,否则不会生…

037、Vue3+TypeScript基础,使用router.push进行导航式路由跳转

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue//引入路由 import router from ./routerconst app = createApp(App); //使用路由 app.use(router); // App.vue的根元素id为app app.mount…

WPF:静态、动态资源以及资源词典

WPF:静态、动态资源以及资源词典 静态资源与动态资源 我们常常会使用样式或者控件模板放在Window.Resources中,比如这样:静态资源与动态资源使用如下: <Window.Resources><SolidColorBrush x:Key="SolidColor" Color="#FF0000" /> </Win…

Hat靶场

Hat靶机的ip是192.168.200.8先用nmap扫描一下靶机所有的端口 nmap -p- 192.168.200.8 发现22端口不知道是否开放 还有一个65535 的unkown端口详细查看一下65535端口的信息 nmap -p 65535 -sV 192.168.200.8 貌似是个ftp 但是尝试匿名连接是连接不上去的dirsearch扫描了一下80端…

.NET 智能组件完全开源

Daniel Roth在2024年3月20日发布了一篇文章: .NET 智能组件简介 – AI 驱动的 UI 控件。文章主要介绍了.NET Smart Components,这是一系列可以快速轻松地添加到.NET应用程序中的AI驱动的UI组件。这些组件旨在简化在现有软件中添加AI功能的过程,无需花费大量时间重新设计用户体…

Ros2 Moveit2 - Robot Model and Robot State

Robot Model and Robot State 在本节中,我们将向您介绍用于在 MoveIt 中使用运动学的 C++ API。 RobotModel 和 RobotState 类 RobotModel 和 RobotState 类是提供对机器人运动学访问权限的核心类。 RobotModel 类包含所有链接和关节之间的关系,包括从 URDF 加载的关节限制属…

用友crm客户关系管理help.php存在任意文件读取漏洞

产品介绍: 用友U8CRM模块是一个综合性的客户关系管理系统,旨在帮助企业从客户出发,以客户关系为管理对象,通过动态管理客户信息、获得 客户知识和评判客户价值状况,来全面提升并保持企业的竞争优势及盈利能力。Fofa语句:body="用友 U8CRM"pocGET /pub/help.php…

史上最全:大厂P6/P7/P8 的职业技能,薪资水平,成长路线 ,最全的对照表。 (建议 收藏,慢慢查)

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

『模拟赛』暑假集训CSP提高模拟25

『模拟赛记录』暑假集训CSP提高模拟25Rank 学新东西,不算挂分(确信。A. 可持久化线段树 原板子[SP11470] TTM - To the moon 主席树,不过区间修改。 赛时想到标记永久化了,不过打 pushdown 的时候没新开点,于是 -100pts。 还挺简单的,建树和更改动态开点,按线段树来,加…

2024暑假集训测试29

前言比赛链接。今上午在家打的,下午回的学校,话说啥时候改成 \(7\) 点开始了? T1 是板子但是没打过标记永久化,想了一段时间想起树状数组维护区间求和操作于是用主席树实现了这个,赛时 T1 不给大样例所以调了挺长时间才放心;T2 想了一会儿没想出来就先打 T3 了,T3 想了一…

hdu2604

用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1); 如果最后一个是f那么这个还无法推出结果,那么往前再考虑一位:那么后三位可能是:mmf, fmf, mff, fff,其中fff和fmf不满足题意所以我们不考虑,但是如果是 mmf的话那么前n…