请教 Perl中使用Image::Magick模块,如何获得像素的值?

seai 2012-04-18 05:23:27
在PHP中,我可以这样获得像素值:

<?php
$image = new Imagick("logo/1.jpg");
$r=$image->getImagePixelColor(0,0);
print_r($r->getColor());
exit();
?>

//Array ( [r] => 47 [g] => 77 [b] => 17 [a] => 1 )



但在perl中,我这样得到的值是不一样的:

my $image = new Image::Magick;
$image->Read("logo/1.jpg");
my ($r, $g, $b) = $image->GetPixel(x=>0,y=>0,normalize=>0);
print $r;exit 0;

# 12079
正确的值应该是47



如果我使用Image::Imlib2,则结果是正确的:

my $image = Image::Imlib2->load("logo/1.jpg");
my ($r, $g, $b,$a) = $image->query_pixel(0,0);print $r;exit 0;

# 47
...全文
217 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2012-04-20
  • 打赏
  • 举报
回复
RGB 值实际上就是r*255^2+g*255^1+b*255^0,也就是相当于255进制。
seai 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

突发奇想:

Python code

>>> 47.0/255
20: 0.1843137254901961
>>> 12079.0/65535
21: 0.1843137254901961
>>> pow(2,16)
22: 65536



所以:47是精度为8bits(0-255)时的值,12079是精度为16bits(0-65535)的值。
[/Quote]


太棒了,应该就是这样的。

这100分给的值!
panghuhu250 2012-04-20
  • 打赏
  • 举报
回复
突发奇想:


>>> 47.0/255
20: 0.1843137254901961
>>> 12079.0/65535
21: 0.1843137254901961
>>> pow(2,16)
22: 65536


所以:47是精度为8bits(0-255)时的值,12079是精度为16bits(0-65535)的值。
seai 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:
打印出来$r的值就是12079,错误的啊。不知道这个12079是否与47存在某种对应转换关系。图形图像方面了解实在太少。


我是说先别把$r分出来,打印整个$image->GetPixel(x=>0,y=>0,normalize=>0)的值,看看它的值的结构,是(r,g,b,a)这样的吗?

另外,你确定normalize的作用吗。看了文档,我还是不懂(图……
[/Quote]


1、确实是(r,g,b,a)这样的,每个分量的值情况都跟r一样,总之与gd库、imager库等方式得到的值对不起,差别非常大;
2、normalize值就是真/假,如果设置为1,其值更不靠谱,是一个精度非常高的浮点数。

所以,个人能力实在进行不下去了,那位能帮帮我啊。。。。。。
panghuhu250 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
打印出来$r的值就是12079,错误的啊。不知道这个12079是否与47存在某种对应转换关系。图形图像方面了解实在太少。
[/Quote]

我是说先别把$r分出来,打印整个$image->GetPixel(x=>0,y=>0,normalize=>0)的值,看看它的值的结构,是(r,g,b,a)这样的吗?

另外,你确定normalize的作用吗。看了文档,我还是不懂(图像处理我是外行)。如果是我,会试试其它的值:1,true,false。
seai 2012-04-19
  • 打赏
  • 举报
回复
肯定是看过才来问的。。。你们我第一天写perl程序,这边的大牛就帮帮我,直接给出代码吧。实在没结了。谢谢!
fibbery 2012-04-19
  • 打赏
  • 举报
回复
看c pan 上的资料啊
seai 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

先打印出$image->GetPixel(x=>0,y=>0,normalize=>0)返回的值看看。
[/Quote]


打印出来$r的值就是12079,错误的啊。不知道这个12079是否与47存在某种对应转换关系。图形图像方面了解实在太少。
panghuhu250 2012-04-18
  • 打赏
  • 举报
回复
先打印出$image->GetPixel(x=>0,y=>0,normalize=>0)返回的值看看。
linux下采用开源库Magick++实现图片合成,图片添加英文字体:需要自己下载编译Magick++,如下为部分代码,下载可看完整代码 #include #include #include #include #include #define MAGICKCORE_QUANTUM_DEPTH 16 #define MAGICKCORE_HDRI_ENABLE 1 //#define _GLIBCXX_USE_CXX11_ABI 0L #define BI_RGB 0L using namespace std; using namespace Magick; bool bCHMixBack(char *JiGuan, char *DateBegain,char *DateEnd,char *BackGroundpic,char *toPic); bool bCHMixBack(char *JiGuan, char *DateBegain,char *DateEnd,char *BackGroundpic,char *toPic) { std::vector draws; Magick::Image img; img.read( BackGroundpic ); printf(BackGroundpic); printf("\nBackGroundpic end\n"); //draws.push_back(Magick::DrawableFont("黑体",(Magick::StyleType)AnyStyle,600,(Magick::StretchType)AnyStretch)); //设置字体 宋体 黑体 微软雅黑// /* Magick::DrawableFont Font = Magick::DrawableFont("黑体",(Magick::StyleType)NormalStyle,400,(Magick::StretchType)AnyStretch);//"/usr/share/fonts/simhei.ttf" draws.push_back(Font); draws.push_back(Magick::DrawablePointSize(22)); //设置字体大小 draws.push_back(Magick::DrawableFillColor(Magick::Color("black")));//字体颜色 char szDate[255]={0}; sprintf(szDate,"%s-%s",DateBegain,DateEnd); draws.push_back(Magick::DrawableText(200,276,"33")); //draws.push_back(Magick::DrawableText(200,276,szDate)); //draws.push_back(Magick::DrawableText(200,240,JiGuan)); printf("\n"); printf(szDate); printf("\n"); printf(JiGuan); printf("\n++++bCHMixBack img.draw(draws)\n"); img.draw(draws); */ string family_ = "黑体"; img.fontFamily(family_); img.fontPointsize(22); img.fontWeight(600); img.fillColor(Magick::Color("black")); img.fontStyle((Magick::StyleType)NormalStyle); Magick::DrawableText text(200,276,"字体颜色"); img.draw(text); printf("\n++++bCHMixBackimg.draw(draws) End\n"); int len = strlen(toPic); if(toPic[len-5]=='.') { len -=4; } else if(toPic[len-4]=='.')

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧