意象。将颜色更改为透明

2024-04-17

我想更改此图像的黑色边框:http://dev.loungeup.net/im/ http://dev.loungeup.net/im/使用 PHP 中的 Imagick 实现透明。

结果图像应该具有可见的灰色边框,灰色边框内的图像可见,灰色边框之外的所有内容(今天为黑色)应该是透明的,并让底层内容(例如在 HTML 页面中)可见。

我已经多次阅读文档并尝试了几种解决方案,但没有弄清楚如何实现它。

任何帮助表示赞赏。

Thanks


这是您可以使用的一种方法,类似于 Photoshop 魔棒工具:

convert original.jpg -alpha set -channel alpha -fuzz 18% \
-fill none -floodfill +0+0 black transparent-border.png

以下是细分的命令:

convert original.jpg:用原始图像启动Imagemagick

-alpha set:激活 Alpha 通道

-channel alpha:让后续操作符作用于 alpha 通道

-fuzz 18%: see -floodfill...

-fill none: see -floodfill...

-floodfill +0+0 black:从左上角开始(+0+0)并找到其中的相邻像素-fuzz的颜色距离black并替换它-fill

transparent-border.png:输出图像

Here's the result: Imagemagick Method 1

不幸的是,正如您所看到的,这种方法仍然会在您提供的图像中留下一些暗像素,因为边框不是纯黑色,并且与内部灰色边框有点混合,而且图像本身非常小。

如果您有质量更好的源图像,或者可以在修改后缩小尺寸的较大源图像,您将获得更好的结果。

如果您被这些小图像困住了(或者如果您只是想使用另一种方法),我建议您采用不同的路线,创建自己的遮罩形状,该形状仅小于原始照片的形状,然后添加回来你自己的灰色边框。我在下面整理了这个过程的一个例子。

此方法的可能命令是:

convert original.jpg mask.png -compose CopyOpacity -composite \
-compose src-over new-border.png -composite clean-result.png

...崩溃了...

convert original.jpg mask.png:使用原始图像启动Imagemagick并引入mask.png作为第二层(mask.png是黑色背景上照片的白色圆角矩形形状,但形状比原始图像稍小 - 结果将删除原件的灰色和黑色边框)。

-compose CopyOpacity -composite:使用mask.png从original.png中“剔除”形状

-compose src-over:将复合方法重置为简单的覆盖

new-border.png -composite:覆盖灰色边框(png是3px宽边框,透明背景上蒙版边缘每侧1px)

clean-result.png:输出图像

我在 Photoshop 中创建了 mask.png 和 new-border.png。你could使用 Imagemagick 的矢量工具并仅使用original.jpg 在一个命令中完成这一切,但这并不容易。

The result of the above: Imagemagick Method 2

最后一点,我不确定您是使用 PHP 的 Imagick 还是命令行中的 Imagemagick。几年前,我尝试使用 Imagick,但很快就因为与命令行相比缺乏文档而感到沮丧(不过,也许情况已经改变了)。相反,我从 PHP 执行命令(例如,从exec() or passthru())。一些或许多其他人可能会告诉您,您永远不应该从 PHP 执行 shell 命令,但只要您小心地转义任何参数,我还没有看到令人信服的反对这样做的论据。然后您将可以使用整个 Imagemagick 文档(http://www.imagemagick.org/Usage/ http://www.imagemagick.org/Usage/).

Cheers.

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

意象。将颜色更改为透明 的相关文章

  • Laravel 4:Facades 是如何解决的?

    我有点想看看 Laravel 4 发生了什么facades在引擎盖下 我们以这个 Facade 为例 File get someArgs 如果我没有记错的话 逐步 过于简化 的调用将是 static method invocation wh
  • 将数组值与同一数组中的其他值进行比较

    我想要实现的是 它将循环遍历数组 然后它会检查数组中的项目在三个点上是否相同 product id 尺寸值和颜色值 我想创建一个新数组 其中列出了项目 我唯一不想要的是重复的值 我希望重复的值如果在这三个点上相同 则数量将被计算在一起 就像
  • PHP IMAP 解码消息

    我有通过 Base64 编码和 8 位编码发送的电子邮件 我想知道如何使用 imap fetchstruct 检查消息的编码 已经这样做了大约两个小时 所以丢失了 然后正确解码 Gmail 和 Mailbox iOS 上的应用程序 将其作为
  • 使用PHP获取http url参数而不自动解码

    我有一个像这样的网址 test php x hello world y 00h 00e 00l 00l 00o 当我将它写入文件时 file put contents x txt GET x gt hello world file put
  • PHP 与 MySQL 中的资源 id #6 错误

    我这是为了我正在制作的投票系统 此代码向用户显示了他们可以从中选择的问题列表 div class main questions p class style1 style2 strong Select Your Question strong
  • 在php中声明一个对象数组

    如何将 php 中的对象列表声明为私有实例变量 在 Java 中 声明看起来像这样private ArrayList ls构造函数会有这个ls new ArrayList Thanks PHP 动态分配内存 而且它并不关心您在数组中存储什么
  • 如何传递数据到 Laravel 中查看?

    我将数据传递到我的刀片视图return View make blog posts 在我的刀片视图中 我正在尝试运行 foreach posts as post 我最终得到一个错误说 posts没有定义 我的问题是如何 posts数组被调用
  • 如何更新 mongodb PHP 中的所有文档

    我正在设置一个 cronjob 来更新该字段views 15关于集合中的所有文档query 这就是我所拥有的 应该有效 update array set gt array views 15 gt 0 db gt queries gt upd
  • ci url 是否可能不适用于index.php

    ci url 是否可能无法与index php 一起使用 我不想在url 中添加index php 如果有人在url中添加index php它应该不起作用 我已经尝试了很多方法 请给我建议 我已经尝试过 但不起作用 RewriteEngin
  • Jquery .ajax method =“post”但$_POST为空

    ajax method post url save php data id 453 action test beforeSend function complete function success function html mydiv
  • SQL 查询:按 ntext 字段分组

    我有以下查询 它基本上检索销量最高的 5 本书 select top 5 count id book orddetails books sold bk from orderdetails orddetails ord inner join
  • 推进并离开加入

    在教义中我可以 q Doctrine Query create gt from One o gt where t text aaa gt andWhere h text bbb gt leftJoin o Two t gt leftJoin
  • PHP 警告:模块“imagick”已在第 0 行未知加载

    我有一个简单的测试文件 其中唯一的 php 代码是 if isset REQUEST back back back REQUEST back filename images back jpg file file exists filenam
  • 最近的 Facebook API 的 FQLQuery

    我下载了最新的 Facebook PHP SDK 当我想要获取有关帖子的信息 例如点赞数 评论数和分享数 时 我的查询可以正常工作 但是 当我想获取用户的好友数量时 它不起作用并告诉我 Facebook FacebookAuthorizat
  • 提交表单问题... Enter key

    我有一个包含几个下拉列表和一个文本字段以及一个按钮的表单 当我单击按钮时 将调用 ajax 函数 ajax 然后调用一个 php 函数 该函数从 mysql 数据库获取结果 问题是我不能通过在表单中 按回车键来完成同样的事情 页面只会刷新
  • 如何访问混合对象(stdClass)和数组构造中的特定值?

    我的变量如下所示 var dump content object stdClass 5 1 errors gt array 1 0 gt object stdClass 6 2 message gt string 24 Invalid or
  • @mysql_connect 和 mysql_connect

    我使用 PHP 连接到数据库没有问题 但是在我测试过的一些脚本中 我发现连接命令存在细微差别 有什么区别 mysql connect and mysql connect 我从未使用过 编写我自己的脚本时使用的符号 所以只是想知道它是否有用
  • 在单个测试中断言多个条件,还是分成多个测试? [复制]

    这个问题在这里已经有答案了 如果您正在测试如下所示的计数函数 那么在一个函数中测试该函数的多项内容与为每个测试使用一个测试函数相比 是否被认为是 正确 或 错误 function testGetKeywordCount tester thi
  • PHP 中的 is_callable 和 function_exists 到底有什么区别?

    我正在开发一个项目 在该项目中我使用了旧版本中已弃用的函数 但不希望我的脚本在旧版本中使用时停止 所以我检查该函数是否存在 如果不存在则创建它 有什么区别function exists and is callablePHP 中哪个更好用 i
  • 在 Woocommerce 中以编程方式创建新产品属性

    如何通过插件为 WooCommerce 创建属性 我只找到 wp set object terms object id terms taxonomy append From 这个堆栈问题 https stackoverflow com qu

随机推荐