ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 了解ImageMagick的转换并转换为Ruby RMagick

2019-06-06 20:21:00  阅读:297  来源: 互联网

标签:php ruby imagemagick rmagick


我没有将以下PHP / ImageMagick代码转换为Ruby RMagick(以使其对未来用户更易于管理并了解它的真正用途):

$output = array();
$returnValue = 0;
$pngFiles = $myDir->find("/.png$/i");
foreach($pngFiles as $pngFile) {
   $cmd = 'convert '.$pngFile->path.' -resize 1x1 -alpha on -channel o -format "%[fx:u.a]" info:'
   exec($cmd, $output, $returnValue);
   if($output[0] != 1) {
      logMessage("PNG file contains some alpha transparency and will not be modified");
   }
}

By now我以为我或多或少地理解了convert-command正在做什么,但将它翻译成RMagick让我重新思考.

例如:$myDir中的PNG上为什么$output [0]!= 1有时为真,但$myDir中的PNG上RMagick的Image.alpha?总是如此?我错过了什么吗?

我认为,如果有人能够向我解释转换命令正在做什么(包括表达式%[fx:u.a]),让我回到正轨的最佳方法就是.

更新:与此同时,我编写了我需要此信息的脚本.你可以check it out at Github,如果它对你有任何帮助.

解决方法:

代码检查特定图像是否包含透明度.

-format’%[fx:u.a]’信息:

这指示图像magick检查第一个图像u,a的alpha通道和输出信息,如果左上角的像素是透明的,它将返回0,如果不是,我将返回非零.这就是为什么图像被调整为1×1的原因,因此只需要查询一个像素. -channel o是不透明度通道.

因此,英文代码将读取,遍历所有PNG文件,仅查看alpha通道(不透明度),调整大小为单个像素并查看它是否透明.因此回声消息.

不幸的是我不知道Ruby或RMagick,但是快速查看API似乎建议使用image.channel(AlphaChannel)来获取alpha通道(AlphaChannel是一个ChannelType值,不确定是否必须指定ChannelType.AlphaChannel) ,然后使用.resize(1,1)来缩小尺寸,并使用.pixel_color(0,0)或.get_pixels(0,0,1,1)完成以获取Pixel对象(get_pixels()返回一个数组),我相信它有一个不透明度属性.但是,channel()命令会将RGB值更改为所选通道的值,并且我不确定它是否保留了不透明度通道,因此您可能只需要查看红色实例,或者完全省略.channel()调用 – 虽然我不知道这是否会破坏结果.

也许如果Ruby支持体面的函数式编程方法.

image.channel(AlphaChannel).resize(1,1).pixel_color(0,0).red

或者如果pixel_color()由于某种原因没有返回不透明度

image.channel(AlphaChannel).resize(1,1).get_pixels(0,0,1,1)[0].red

如果没有channel()调用,它将是:

image.resize(1,1).pixel_color(0,0).opacity

要么

image.resize(1,1).get_pixels(0,0,1,1)[0].opacity

同样,我的Ruby不存在,所以你可能不得不重新安排那些,但原型就在那里.

参考

> RMagick Documentation
> ImageMagick ‘fx’ escapes
> ImageMagick -channel options

标签:php,ruby,imagemagick,rmagick
来源: https://codeday.me/bug/20190606/1189444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有