作者frank1983 (What?)
看板Perl
标题Re: [问题] 想请问大家有关GD读档的问题
时间Thu May 14 05:31:18 2009
※ 引述《nochinese (童鞋~入联吗?)》之铭言:
: 不好意思有个困扰很久的问题想请问大家,
: 请问大家,能不能够用GD读取两个图把它们放在同一张图上?
: 就类似小画家剪下贴上这样。
: 并控制他们摆放的位置。
: 查了CPAN等网路资料,还是没个谱...
: 感谢大家的帮忙。
虽然之前没用过 GD module
不过还是可以试着回答你的问题
就当作是一次学习新套件的机会^^
也请有使用 GD 经验的大大们能给予指教~
===================================================
假设我们有两张图 image1.png, image2.png
我希望能将 image2.png 的一部分贴到 image1.png 上
如下图所示
X
+--->
Y | (0,0) image2 (0,0) image1
v o------------------+ o----------------+
| ($srcX,$srcY) | | ($dstX,$dstY) |
| o----+ | | o----+ |
| $height | | ================> | | |
| +----+ | 贴上 | +----+ |
| $width | | |
+------------------+ +----------------+
其中 ($srcX, $srcY) 是要复制区域左上角的座标
$width 和 $height 分别为复制区域的宽与高
($dstX, $dstY) 则是要贴在 image1 上的位置
其程式码可写为:
use GD;
my $image1 = GD::Image->new('image1.png') or die;
my $image2 = GD::Image->new('image2.png') or die;
$image1->copy($image2, $dstX, $dstY,
$srcX, $srcY, $width, $height);
此时 $image1 即是新合成的图片
如果想贴上整张 image2.png
可使用
$image1->copy($image2, $dstX, $dstY,
0, 0, $image2->getBounds());
getBounds() 会回传 $image2 的宽与高
然後我们可以将结果存到 new_image.png:
open my $fh, '>', 'new_image.png' or die;
binmode($fh);
print {$fh} $image1->png;
close $fh;
===================================================
范例程式;
#!/usr/bin/perl
use warnings;
use strict;
use GD;
my $image1 = GD::Image->new('image1.png') or die;
my $image2 = GD::Image->new('image2.png') or die;
# 设定 $dstX, $dstY, $srcX, $srcY, $width, $height 的值...
$image1->copy($image2, $dstX, $dstY,
$srcX, $srcY, $width, $height);
open my $fh, '>', 'new_image.png' or die;
binmode($fh);
print {$fh} $image1->png;
close $fh;
===================================================
参考资料:
1.
http://search.cpan.org/dist/GD/GD.pm
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.230.108
1F:推 kornelius:解说真用心 , frank++ 05/14 13:27
※ 编辑: frank1983 来自: 140.112.230.108 (05/14 15:25)
2F:推 nochinese:真的非常感谢~对我帮助很大~ 05/17 14:56