![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 14.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam skrypt, który nakłada jeden obrazek na drugi. Wszystko działa dobrze, tylko mam pytanie. Jak zrobić, żeby obrazek który nakładam wyświetlał się w prawym dolnym rogu obrazka źródłowego??
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); ?> |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 27 Dołączył: 27.05.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
http://www.swww.pl/74,pokaz,Artykuly.html zerknij tu masz jak ustalić odpowiedni róg obrazka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 14.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przerobiłem kod, i teraz mam coś takiego:
Kod <?php $pozycja = "br"; 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,$pozycja){ $szer=imagesx($obrazek1); $wys=imagesy($obrazek1); $szer2=imagesx($obrazek2); $wys2=imagesy($obrazek2); if( $pozycja == "br" ) { $od_x = $szer - $szer2; $od_y = $wys - $wys2; } 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('obrazek.jpg'); // obrazek źródłowy $obrazek2=ImageCreateFromJpeg('logo.jpg'); // obrazek do nałożenia $obrazek=ImageCreateTrueColor(imagesx($obrazek1),imagesy($obrazek1)); // obrazek roboczy naloz($obrazek1, $obrazek2, $obrazek, $od_x, $od_y, 0, 0, $szer2, $wys2, $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); ?> Coś nie działa i teraz nie widać obrazka, którego się nakłada na obrazek źródłowy :/ |
|
|
![]()
Post
#4
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pewnie błędy w matematyce lub podanie niewłaściwych parametrów do funkcji.
Po krótce Ci wyjaśnie jak to zrobić, zrób to sam, nie ściągaj kodów: Center: X oraz Y analogicznie: [width(obrazu na który nakładasz)/2]-[width(nakładanego)-2] Top-left: X: 0; Y: 0; Top-right: X: width oryginału - width nakładanego obrazka; Y: 0; Top-center X: z rozwiązania center; Y: 0; Center-left: X: 0; Y: z rozwiązania center; Center-right: X: z rozwiązania top-right Y: z rozwiązania ceter I tak analogicznie... wyobraź sobie to (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Kawałek mojego kodu:
Zwracam pozycję X i Y, tam, gdzie ma być nałożony obrazek. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 04:20 |