Re: [問題] 想請問大家有關GD讀檔的問題
※ 引述《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
推
05/14 13:27, , 1F
05/14 13:27, 1F
※ 編輯: frank1983 來自: 140.112.230.108 (05/14 15:25)
推
05/17 14:56, , 2F
05/17 14:56, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章