php GD 为图像添加填充

2024-03-23

我在网上找到了一些关于 PHP+GD 图像处理的内容,但似乎没有一个能给我我想要的东西。

我让人上传任意尺寸的图像,我编写的脚本将图像大小调整为不超过 200 像素宽 x 200 像素高,同时保持纵横比。例如,最终图像可能是 150 像素 x 200 像素。我想要做的是进一步操作图像,并在图像周围添加遮罩,将其填充到 200 像素 x 200 像素,同时不影响原始图像。例如:

我必须调整图像大小的代码在这里,我尝试了一些方法,但在实现添加填充的辅助过程时肯定遇到问题。

list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
switch($imageType) {
    case "image/gif":
        $source=imagecreatefromgif($image); 
        break;
    case "image/pjpeg":
    case "image/jpeg":
    case "image/jpg":
        $source=imagecreatefromjpeg($image); 
        break;
    case "image/png":
    case "image/x-png":
        $source=imagecreatefrompng($image); 
        break;
}
imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
imagejpeg($newImage,$image,80);
chmod($image, 0777);

我想我需要使用imagecopy()就在之后imagecopyresampled()称呼。这样图像就已经是我想要的大小了,我只需要创建一个正好 200 x 200 的图像并将 $newImage 粘贴到该图像的中心(垂直和水平)。我是否需要创建一个全新的图像并将两者合并,或者有没有办法只填充我已经创建的图像($newImage)?预先感谢,我找到的所有教程都没有引导我,而我在 SO 上找到的唯一适用的教程是针对 android :(


  1. 打开原图
  2. 创建一个新的空白图像。
  3. 用您想要的背景颜色填充新图像
  4. 使用 ImageCopyResampled 调整大小并将原始图像复制到新图像的中心
  5. 保存新图像

除了 switch 语句之外,您还可以使用

$img = imagecreatefromstring( file_get_contents ("path/to/image") );

这将自动检测图像类型(如果您的安装支持该图像类型)

更新了代码示例

$orig_filename = 'c:\temp\380x253.jpg';
$new_filename = 'c:\temp\test.jpg';

list($orig_w, $orig_h) = getimagesize($orig_filename);

$orig_img = imagecreatefromstring(file_get_contents($orig_filename));

$output_w = 200;
$output_h = 200;

// determine scale based on the longest edge
if ($orig_h > $orig_w) {
    $scale = $output_h/$orig_h;
} else {
    $scale = $output_w/$orig_w;
}

    // calc new image dimensions
$new_w =  $orig_w * $scale;
$new_h =  $orig_h * $scale;

echo "Scale: $scale<br />";
echo "New W: $new_w<br />";
echo "New H: $new_h<br />";

// determine offset coords so that new image is centered
$offset_x = ($output_w - $new_w) / 2;
$offset_y = ($output_h - $new_h) / 2;

    // create new image and fill with background colour
$new_img = imagecreatetruecolor($output_w, $output_h);
$bgcolor = imagecolorallocate($new_img, 255, 0, 0); // red
imagefill($new_img, 0, 0, $bgcolor); // fill background colour

    // copy and resize original image into center of new image
imagecopyresampled($new_img, $orig_img, $offset_x, $offset_y, 0, 0, $new_w, $new_h, $orig_w, $orig_h);

    //save it
imagejpeg($new_img, $new_filename, 80);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php GD 为图像添加填充 的相关文章

  • 增加内存限制时出现奇怪的错误

    我使用的是共享托管环境 PHP 的默认内存限制是 32M 我在 Concrete5 设置方面遇到一些问题 当我尝试登录 Concrete5 的管理面板时 出现内存限制错误Allowed memory size of 33554432 byt
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 纯旧 PHP 对象 (POPO) 一词的确切含义是什么?

    我想了解一下波波 我搜索了 popo 发现它代表 Plain Old Php Object 但我不确定 Plain Old Php Object 的确切含义 我想知道什么是 popo 以及在哪里使用它 谢谢 普通旧 在此处插入语言 对象是一
  • 在PHP中,如何在表格中显示数组内容

    如果我在 MySQL 客户端中进行选择 我将得到如下所示的输出 mysql gt select FROM group LIMIT 2 group id group supergroup id group deletable group la
  • 安装 OCI8:如何纠正“使用未定义常量 OCI_COMMIT_ON_SUCCESS”错误?

    我正在尝试在 RedHat 服务器 RHEL7 上为我的 Apache 服务器安装 OCI8 此时 当我尝试使用 Symphony 连接到我的服务器时 出现以下错误 异常 ErrorException 使用未定义的常量 OCI COMMIT
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • PHP-列出一年中一个月中的所有天[重复]

    这个问题在这里已经有答案了 可能的重复 我在 PHP 中有 2 个日期 如何运行 foreach 循环来遍历所有这些日期 https stackoverflow com questions 3207749 i have 2 dates in
  • 使用 php ping 网站

    我想创建一个 php 脚本 它将 ping 一个域并列出响应时间以及请求的总大小 这将用于监控网站网络 我尝试过curl 这是我到目前为止的代码 function curlTest2 url clearstatcache return if
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • Laravel:使用 Faker 播种多个独特的列

    介绍 怎么样 伙计们 我有一个关于模型工厂和多个独特列的问题 背景 我有一个名为 Image 的模型 该模型将语言支持存储在单独的模型中 图片文字 图片文字 has an image id栏 语言栏和文本栏 图片文字有一个约束MySQL那个
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • PHP括号少IF条件不接受多个语句

    我从来都不喜欢控制结构中的括号 直到今天我才意识到它如何只接受括号内的一条语句而不是 if 条件 如果我有多个语句 它会抛出语法错误 这是 PHP 的工作方式还是我的 IDE 有问题 显然错误很明显 但我只是想确保这是正常的 如果您有任何其
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • PHP 的 mb_internal_encoding 实际上是做什么的?

    根据 PHP 网站 http www php net manual en function mb internal encoding php它这样做 coding 是用于 HTTP 输入的字符编码名称 字符编码转换 HTTP输出字符编码 转
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • 从关系中合并 Laravel 中的集合

    假设我有 3 张桌子 Images Subject Style 关系是多对多 图像 主题 和多对多 图像 样式 现在我想做一些类似的事情 result subjectResult gt images gt merge styleResult
  • 是否可以使用流上下文在 PHP 下使用 FTPS?

    我了解到使用ftpsPHP for Windows 下的 ftp ssl connect 很困难 您被要求进入构建自己的二进制文件以包括 Open SSL 的漫长旅程 我找到了以下建议phpseclib http phpseclib sou
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4

随机推荐

  • JBoss 7.1 开发问题

    我是 JBoss 7 1 的新手 并尝试将我们的应用程序从 jboss 6 0 迁移到 jboss 7 1 但在开发时它仅自动加载几个特定的 jar 这与 jboss 6 0 不同 jboss 6 0 从 lib 文件夹加载所有 jar 如
  • 在 Visual Studio for C# 中从流畅的接口类智能感知中隐藏 GetHashCode/Equals/ToString?

    我有一个用于 IoC 容器注册过程的流畅接口 其中包含一些用于构建注册的类 例如 我可以这样做 builder Register
  • dir() 没有内置方法

    有没有办法在没有内置函数的情况下获取对象的所有属性 我希望在没有类型包的情况下实现这一点 或者如果可能的话 无需手动检查双下划线 我尝试过 dir 但它给了我所有内置的东西 理想情况下我想要类似的东西 class A foo bar gt
  • Socket.io 为单个请求发送多条消息

    我在 NodeJS Typescript 项目中使用 Socket io 其中客户端向服务器发送一条消息 然后使用套接字将相同的消息发送回客户端 然而 每次我向服务器发送一条新消息时 服务器发回消息的次数都会增加 1 这不是我对其进行编程的
  • 最长回文子串和后缀 trie

    我在谷歌上搜索了一个相当著名的问题 即 the longest palindromic substring我发现推荐后缀尝试的链接可以很好地解决该问题 例子SO https stackoverflow com questions 70437
  • 将 eBPF 连接到 KPROBE?

    我写了一个简单的程序附加到execve使用 kprobe 进行系统调用 但我看不到相关输出 这是我的 one c BPF 程序 include
  • Glassfish:在应用程序启动时静默忽略不可用的数据源

    我有一个 EJB 应用程序 它在 Glassfish 3 1 2 上使用 JPA 2 0 提供程序是 EclipseLink 当数据库关闭时 应用程序无法启动 甚至无法部署 这是因为 EclipseLink 会进行一些初步验证 有没有一种方
  • GIT:如何从先前提交中签出文件而不覆盖当前文件?

    之前的几次提交中 我有一些 javascript 以一种方式工作 经过几次提交的过程 我现在让它以另一种方式工作 我想查看该文件 因为它是几次提交前的 因为我可能想在新的 javascript 中使用它的某些方面 但是我不想将当前文件恢复到
  • 在 Blazor 组件中使用带有继承的泛型类型

    我正在尝试在 Blazor 中创建一个 通用列表 组件 并希望该组件能够接受从基类派生的任何对象 我的代码目前如下 基类 public class Model PK for the record Key public int Id get
  • 在 Ruby 中动态设置局部变量 [重复]

    这个问题在这里已经有答案了 我对在 Ruby 中动态设置局部变量感兴趣 不创建方法 常量或实例变量 所以像这样 args a 1 args each pair do k v Object make instance var k v end
  • 有没有办法编写一个也可以在 Windows 7 和 Vista 上运行的 WinRt (Metro) 应用程序?

    我们不能让那些长期无法升级到 Windows 8 的客户束手无策 然而有是需求我们的应用程序的 平板电脑 触摸屏 版本 那么 我们如何才能通过单一代码库同时支持 Windows 8 上的 Metro 触摸和我们当前的客户呢 当 WPF 出现
  • 如何使用规范链接删除重复的标题标签和元描述标签

    我为我的网站运行了 SEO 工具 它显示我有重复的标题标签和元描述标签 两者都在 domain com 和 index html 中 它们是同一个文件 如何使用 Canonical Link 删除重复标签 请帮忙 谢谢 您遇到了一个典型的重
  • Phonegap/Cordova 应用程序在三星 Galaxy S4 等高分辨率设备上缩小得太小

    在 iPhone 4 4S 640x960 HTC Desire HD 480x800 Samsung Galaxy Note 等设备上 我的 Phonegap Cordova 应用程序在以下设置下看起来不错 但在三星 Galaxy S4
  • node.js https.get() 引发错误 ECONNREFUSED

    OAuth 舞蹈的步骤之一涉及将通过回调接收到的代码交换为访问令牌 特别是对于 Facebook 服务器端身份验证 以下 https GET 请求在响应正文中返回访问代码 https graph facebook com oauth acc
  • Linux 上的 Python mmap“权限被拒绝”

    我有一个非常大的文件 我试图用 mmap 打开它 但它给我的权限被拒绝 我尝试过不同的标志和模式os open但它对我不起作用 我究竟做错了什么 gt gt gt import os mmap gt gt gt mfd os open Bi
  • 使用 ASANA Python API 更新自定义字段

    我正在尝试更新体式列表中自定义字段的值 我正在使用Asana API v1 的官方 Python 客户端库 https github com Asana python asana 我的代码目前看起来像这样 project Example P
  • query.list 和 query.iterate 之间的区别

    使用之间到底有什么区别Query list http docs jboss org hibernate orm 3 2 api org hibernate Query html list 28 29 and Query iterator h
  • 如何使用 Swift 在 NSOpenGLView 中绘制图像?

    基本上 我想创建一个使用 OPenGL 进行渲染的 ImageView 我的最终计划是使用它作为带有 CIFilters 的视频播放器的基础 我关注了一个tutorial https github com objcio core image
  • MFC:如何减少OnInitialUpdate()滚动的时间成本?

    我需要打印多行数据 每行都可以进行文本换行 因此高度会有所不同 要进行滚动 我需要导出总高度 由于每条线可能有不同的高度 我只能遍历每条线来累加高度 如下所示 void CMyScrollView OnInitialUpdate for a
  • php GD 为图像添加填充

    我在网上找到了一些关于 PHP GD 图像处理的内容 但似乎没有一个能给我我想要的东西 我让人上传任意尺寸的图像 我编写的脚本将图像大小调整为不超过 200 像素宽 x 200 像素高 同时保持纵横比 例如 最终图像可能是 150 像素 x