±κΝΏε[«rΕ·iΎ@TOPΙίι
perl+GD.pmΕVΪ€τ
1.ΝΆίΙ
ΝvO}[ΕΝΘ’Ε·BuvO~OΕ«ιvΖΎ¦Ώα€ΩΗΕ«άΉρB
±ΜTCgΜJE^βAΌhWFl[^Ζ«αΑΖά[ί[ιΖ©μΑ½η’Ε·B
»±ηΦρπOρΙΗέiίΔΎ³’B
ΏΘέΙApushΖpopΖshiftΖunshiftΖ©ͺΗκͺΗκΎ©’Ώ’Ώ²ΧΘ’ΖoΔ±Θ’xΕ·B
2.±ΜΆͺΞΫΖ΅Διl
γLΜμΑ½ζ€ΘΰΜπAuβθϋν©κΞμκι―Η²ΧιΜίρΗ³vΑΔxΘl
GDͺόΑΔιT[oπg¦ιlΰ΅ΝGDπόκηκιl
GDΜt@XΖ©©Δά ά ν©ιl
@¨QlFGD.pm - GdOtBbNXECuΦΜC^[tF[X
Tu[`Ιψn·βθϋͺν©ιl
ίΙ€iάΎάΎHj
t@XΙΝGIFp\bh ιρΎ―Ηg¦Θ’ρΎ―ΗH
¬Tu[`Q(image_comp_gd.pl)
ζΖFΜΑZ¬
ζΖFΜΈZ¬
ζΖFΜζZ¬
ζπ§ί΅Δ¬
t@XΙΝGIFp\bh ιρΎ―Ηg¦Θ’ρΎ―ΗH
μ ]XΕκϊͺκ½Ζ«Ι«¦ά·½BΖθ ¦ΈAlibgd 2.0.28Θ~ΕΞ΅½Ζ©»ρΘ€ν³Ε·
¬Tu[`Q(image_comp_gd.pl)
u’Δέ½ΜΕrequireΕΔΡo΅ΔgΑΔέΔκ³’Bit@CΌΝimage_comp_gd.plΙΟ¦ΔΎ³’Ε·j
θΑΘ€τ(κΔ’΅Ώ€τ)
g’ϋΝΊLQΖ
ζΖFΜΑZ¬
’λρΘFΜζπg’½’Ζ«AeFΙΒ’ΔζπμιΜΝεΟBBBΖ’€±ΖΕA
umNζvπμθA»κΙFπΑZ¬·ι±ΖΕκJ·ι±ΖΘlXΘFΜζπg€±ΖͺΕ«ά·B
α¦ΞA«αΑΖά[ί[ιΜfUCΜFβC@tmarkΜFΝ»Μϋ@πp΅Δ’ά·B
ΘΊΙ»ΜTu[`π¦΅ά·B
g’ϋA$imageΙA$image2(t@C)Ζ$color𬡽ζπ\θt―
$image = &image_add_comp($image2, $start_x, $start_y, $color, $image);
$image2:\θt―t@CΌipXj
$start_x:x²`ζJn_
$start_y:y²`ζJn_
$color:¬F(16iFα#ffffff)
$image:©ͺ©gπn·
Τθl:¬γΜ$image
@
#perl+GDΕΑθΜFΖζπΑZ¬
sub image_add_comp{
#ψ
my $image2 = $_[0];
my $start_x = $_[1];
my $start_y = $_[2];
my $color = $_[3];
my $image = $_[4];
#Οθ`EEEΖ’€©A½gΑΔι©c¬·ι½ίρ
my $image_width; my $image_height;
my $image2_width; my $image2_height;
my $image2_new;
my $temp_image;
my $color_r; my $color_g; my $color_b;
my @color;
my $r; my $g; my $b;
my $draw_color;
#FfR[h
$color =~ s/\#//ig;
@color = split(//,$color);
$color_r = hex($color[0] . $color[1]);
$color_g = hex($color[2] . $color[3]);
$color_b = hex($color[4] . $color[5]);
####`ζ±±©η
#ζΗέέATCYζΎ
$image2_new = newFromPng GD::Image($image2);
($image2_width,$image2_height) = $image2_new->getBounds() ;
#κ`ζpΜGπpΣiJ[pbgΜβθΕΌΪhbgπ`―Θ’j
$temp_image = new GD::Image(1,1);
#ehbgΜΙόι
for(my $i=0;$i<$image2_width;++$i){
for(my $j=0;$j<$image2_height;++$j){
#FζΎ
($r,$g,$b) = $image2_new->rgb($image2_new->getPixel($i,$j));
########ΑZ########
if($r+$color_r > 255){
$r = 255;
}else{
$r = $r+$color_r;
}
if($g+$color_g > 255){
$g = 255;
}else{
$g = $g+$color_g;
}
if($b+$color_b > 255){
$b = 255;
}else{
$b = $b+$color_b;
}
########ΑZIΉ####
#κ`ζpLpXΙ`’Δέι
$draw_color = $temp_image->colorAllocate($r,$g,$b);
$temp_image->setPixel(1,1,$draw_color) ;
#ΕARs[
$image->copy($temp_image,$start_x+$i,$start_y+$j,1,1,1,1);
#’Ώ’ΏJϊ΅Θ’ΖF«θΘ’imΦGj
$temp_image->colorDeallocate($draw_color);
}
}
####`ζRRάΕ
return $image;
}
ζΖFΜΈZ¬
ΑZ¬Μ\[XΜΑZπPΙΈZΙ·κΞζ’B±ΜκΝAζ©ηFπΈZ·ι±Ζπl¦ι
$image = &image_sub_comp($image2, $start_x, $start_y, $color, $image);
@
########ΈZ########
if($r-$color_r < 0){
$r = 0;
}else{
$r = $r-$color_r;
}
if($g-$color_g < 0){
$g = 0;
}else{
$g = $g-$color_g;
}
if($b-$color_b < 0){
$b = 0;
}else{
$b = $b+$color_b;
}
########ΈZIΉ####
ζΖFΜζZ¬
ΑZ¬Μ\[XΜΑZπζZΙ·κΞζ’BΰΏλρA255ΕΑΔ³K»Ν·ιB
ζZΜκΝ255πz¦ι±ΖΝΘ’ΜΕifΖ©ΝgνΘ’Ε¨’ΔέιB
$image = &image_multi_comp($image2, $start_x, $start_y, $color, $image);
@
########ζZ########
$r=$r*$color_r/255;
$g=$g*$color_g/255;
$b=$b*$color_b/255;
########ζZIΉ####
ζπ§ί΅Δ¬
g’ϋA$imageΙA$image2(t@C)ΜΆγhbgΖ―ΆFπ§ί΅Δ¬
$image = &image_transparent_comp($image2, $start_x, $start_y, $image);
$image2:\θt―t@CΌipXj
$start_x:x²`ζJn_
$start_y:y²`ζJn_
$image:©ͺ©gπn·
Τθl:¬γΜ$image
Tvi±ΜTvΜ\[Xj
#perl+GDΕwiFiΆγΜFjπ§ί΅ΒΒζπ¬
sub image_tranparent_comp{
#ψ
my $image2 = $_[0];
my $start_x = $_[1];
my $start_y = $_[2];
my $image = $_[3];
#Οθ`EEEΖ’€©A½gΑΔι©c¬·ι½ίρ
my $image2_width;
my $image2_height;
my $image2_new;
my $temp_image;
my $transparent;
####`ζ±±©η
#ζΗέέATCYζΎ
$image2_new = newFromPng GD::Image($image2);
($image2_width,$image2_height) = $image2_new->getBounds() ;
#κ`ζpΜGπpΣiJ[pbgΜβθΕΌΪhbgπ`―Θ’j
$temp_image = new GD::Image(1,1);
#ΆγΜhbgπ§ίFwθ
$transparent = $image2_new->getPixel(0,0);
#ehbgΜΙόι
for(my $i=0;$i<$image2_width;++$i){
for(my $j=0;$j<$image2_height;++$j){
if($transparent ne $image2_new->getPixel($i,$j)){
#Rs[
$image->copy($image2_new,$start_x+$i,$start_y+$j,$i,$j,1,1);
}
}
}
return $image;
}
lK|V
g’ϋF$imageπlK|W·ι
$image = &image_negaposi($image);
$image:©ͺ©gπn·
Τθl:¬γΜ$image
Tvi±ΜTvΜ\[Xj
sub image_negaposi{
#ψ
my $image = $_[0];
#Οθ`EEEΖ’€©A½gΑΔι©c¬·ι½ίρ
my $image_width; my $image_height;
my $r; my $g; my $b;
my $draw_color;
my $temp_image;
####`ζ±±©η
#TCYζΎ
($image_width,$image_height) = $image->getBounds() ;
#κ`ζpΜGπpΣiJ[pbgΜβθΕΌΪhbgπ`―Θ’j
$temp_image = new GD::Image(1,1);
#ehbgΜΙόι
for(my $i=0;$i<$image_width;++$i){
for(my $j=0;$j<$image_height;++$j){
#FζΎ
($r,$g,$b) = $image->rgb($image->getPixel($i,$j));
########lK|W########
#χΙ³mΕΝΘ’Ε·―ΗAά A’’Ζ΅άΉ€τ
$r = ($r - 128)*(-1)+127;
$g = ($g - 128)*(-1)+127;
$b = ($b - 128)*(-1)+127;
########lK|WIΉ####
#κ`ζpLpXΙ`’Δέι
$draw_color = $temp_image->colorAllocate($r,$g,$b);
$temp_image->setPixel(1,1,$draw_color) ;
#ΕARs[
$image->copy($temp_image,$i,$j,1,1,1,1);
#’Ώ’ΏJϊ΅Θ’ΖF«θΘ’imΦGj
$temp_image->colorDeallocate($draw_color);
}
}
####`ζRRάΕ
return $image;
}