Kod
<?php
function gpixel($im,$x,$y){
return Array((($rgb=ImageColorAt($im,$x,$y))>>16) & 0xff,($rgb>>8) & 0xff,$rgb & 0xff);
}
function spixel($im,$x,$y,$color){
ImageSetPixel($im,$x,$y,ImageColorAllocate($im,$color[0],$color[1],$color[2]));
}
function aspixel($pix1,$pix2,$tol=2){
for($i=0,$podobne=true;$i<3;$i++)
if(($pix1[$i]+$tol<$pix2[$i]) || ($pix1[$i]-$tol>$pix2[$i])) $podobne=false;
return $podobne;
}
function srednia($l1,$l2,$k){
return abs(round($l1-($l1-$l2)*$k));
}
function naloz($obrazek1,$obrazek2,$obrazek,$alpha=50,$nakryj=false,$tolerance=2){
$szer=imagesx($obrazek1); $wys=imagesy($obrazek1);
$szer2=imagesx($obrazek2); $wys2=imagesy($obrazek2);
if($nakryj) $trans=gpixel($obrazek2,1,1);
for($i=0,$a=$alpha/100;$i<$szer;$i++){
for($j=0;$j<$wys;$j++){
$pixel1=gpixel($obrazek1,$i,$j);
if($i<$szer2 && $j<$wys2) $pixel2=gpixel($obrazek2,$i,$j); else $pixel2=$pixel1;
$pixel3=Array();
if(($nakryj && aspixel($pixel2,$trans,$tolerance)) || aspixel($pixel1,$pixel2,0))
$pixel3=$pixel1; else
for($k=0;$k<3;$k++) $pixel3[$k]=srednia($pixel1[$k],$pixel2[$k],$a);
spixel($obrazek,$i,$j,$pixel3);
}
}
}
?>
<?php
$alpha=100;
// 0 = drugi obrazek bardziej przeźroczysty
// 50 = obrazki równo przeźroczyste
// 100 = pierwszy obrazek bardziej przeźroczysty
$nakryj=false;
// true = drugi obrazek ma mieć przeźroczyste tło
// false = oba obrazki są tak samo ważne
$obrazek1=ImageCreateFromJpeg('obrazek1.jpg'); // obrazek źródłowy
$obrazek2=ImageCreateFromJpeg('obrazek2.jpg'); // obrazek do nałożenia
$obrazek=ImageCreateTrueColor(imagesx($obrazek1),imagesy($obrazek1)); // obrazek roboczy
naloz($obrazek1,$obrazek2,$obrazek,$alpha,$nakryj,50);
Header('Content-type: image/jpeg'); // ustawienie Content-type (nagłówek dla przeglądarki)
ImageJpeg($obrazek); // przesłanie do przeglądarki obrazka
ImageDestroy($obrazek1); // zniszcz je !
ImageDestroy($obrazek2);
ImageDestroy($obrazek);
?>
function gpixel($im,$x,$y){
return Array((($rgb=ImageColorAt($im,$x,$y))>>16) & 0xff,($rgb>>8) & 0xff,$rgb & 0xff);
}
function spixel($im,$x,$y,$color){
ImageSetPixel($im,$x,$y,ImageColorAllocate($im,$color[0],$color[1],$color[2]));
}
function aspixel($pix1,$pix2,$tol=2){
for($i=0,$podobne=true;$i<3;$i++)
if(($pix1[$i]+$tol<$pix2[$i]) || ($pix1[$i]-$tol>$pix2[$i])) $podobne=false;
return $podobne;
}
function srednia($l1,$l2,$k){
return abs(round($l1-($l1-$l2)*$k));
}
function naloz($obrazek1,$obrazek2,$obrazek,$alpha=50,$nakryj=false,$tolerance=2){
$szer=imagesx($obrazek1); $wys=imagesy($obrazek1);
$szer2=imagesx($obrazek2); $wys2=imagesy($obrazek2);
if($nakryj) $trans=gpixel($obrazek2,1,1);
for($i=0,$a=$alpha/100;$i<$szer;$i++){
for($j=0;$j<$wys;$j++){
$pixel1=gpixel($obrazek1,$i,$j);
if($i<$szer2 && $j<$wys2) $pixel2=gpixel($obrazek2,$i,$j); else $pixel2=$pixel1;
$pixel3=Array();
if(($nakryj && aspixel($pixel2,$trans,$tolerance)) || aspixel($pixel1,$pixel2,0))
$pixel3=$pixel1; else
for($k=0;$k<3;$k++) $pixel3[$k]=srednia($pixel1[$k],$pixel2[$k],$a);
spixel($obrazek,$i,$j,$pixel3);
}
}
}
?>
<?php
$alpha=100;
// 0 = drugi obrazek bardziej przeźroczysty
// 50 = obrazki równo przeźroczyste
// 100 = pierwszy obrazek bardziej przeźroczysty
$nakryj=false;
// true = drugi obrazek ma mieć przeźroczyste tło
// false = oba obrazki są tak samo ważne
$obrazek1=ImageCreateFromJpeg('obrazek1.jpg'); // obrazek źródłowy
$obrazek2=ImageCreateFromJpeg('obrazek2.jpg'); // obrazek do nałożenia
$obrazek=ImageCreateTrueColor(imagesx($obrazek1),imagesy($obrazek1)); // obrazek roboczy
naloz($obrazek1,$obrazek2,$obrazek,$alpha,$nakryj,50);
Header('Content-type: image/jpeg'); // ustawienie Content-type (nagłówek dla przeglądarki)
ImageJpeg($obrazek); // przesłanie do przeglądarki obrazka
ImageDestroy($obrazek1); // zniszcz je !
ImageDestroy($obrazek2);
ImageDestroy($obrazek);
?>