Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] obazek na obrazu
Forum PHP.pl > Forum > Przedszkole
mefjiu
Witam mam skrypcik który wstawia obrazek na obrazku, ale wstawia go w lewym górnym rogu, a ja chciałbym aby wstawiał go na dole w prawym rogu. Wiem jak zrobić to teoretycznie ale nie potrafię przenieść tego na kod :-)
Wiec proszę wszelkie rady porady.

Z góry za wszystko dziękuję .

  1. <?php
  2.  
  3. function gpixel($im,$x,$y){
  4.  return Array((($rgb=ImageColorAt($im,$x,$y))>>16) & 0xff,($rgb>>8) & 0xff,$rgb & 0xff);
  5. }
  6.  
  7. function spixel($im,$x,$y,$color){
  8.  ImageSetPixel($im,$x,$y,ImageColorAllocate($im,$color[0],$color[1],$color[2]));
  9. }
  10.  
  11. function aspixel($pix1,$pix2,$tol=2){
  12.  for($i=0,$podobne=true;$i<3;$i++)
  13. if(($pix1[$i]+$tol<$pix2[$i]) || ($pix1[$i]-$tol>$pix2[$i])) $podobne=false;
  14.  return $podobne;
  15. }
  16.  
  17. function srednia($l1,$l2,$k){
  18.  return abs(round($l1-($l1-$l2)*$k));
  19. }
  20.  
  21. function naloz($obrazek1,$obrazek2,$obrazek,$alpha=50,$nakryj=false,$tolerance=2){
  22.  
  23.  
  24.  
  25.  
  26.  $szer=imagesx($obrazek1); $wys=imagesy($obrazek1);
  27.  $szer2=imagesx($obrazek2); $wys2=imagesy($obrazek2);
  28.  if($nakryj) $trans=gpixel($obrazek2,1,1);
  29.  
  30.  for($i=0,$a=$alpha/100;$i<$szer;$i++){
  31. for($j=0;$j<$wys;$j++){
  32.  $pixel1=gpixel($obrazek1,$i,$j);
  33.  if($i<$szer2 && $j<$wys2) $pixel2=gpixel($obrazek2,$i,$j); else $pixel2=$pixel1;
  34.  
  35.  $pixel3=Array();
  36.  if(($nakryj && aspixel($pixel2,$trans,$tolerance)) || aspixel($pixel1,$pixel2,0))
  37. $pixel3=$pixel1; else
  38. for($k=0;$k<3;$k++) $pixel3[$k]=srednia($pixel1[$k],$pixel2[$k],$a);
  39.  spixel($obrazek,$i,$j,$pixel3);
  40. }
  41.  }
  42. }
  43.  
  44. ?>
  45. <?php
  46.  
  47. $alpha=70;
  48.  // 0  = drugi obrazek bardziej przeźroczysty
  49.  // 50 = obrazki równo przeźroczyste
  50.  // 100 = pierwszy obrazek bardziej przeźroczysty
  51.  
  52. $nakryj=false;
  53.  // true = drugi obrazek ma mieć przeźroczyste tło
  54.  // false = oba obrazki są tak samo ważne
  55.  
  56. $obrazek1=ImageCreateFromJpeg('1.jpg'); // obrazek źródłowy
  57. $obrazek2=ImageCreateFromJpeg('2.jpg'); // obrazek do nałożenia
  58. $obrazek=ImageCreateTrueColor(imagesx($obrazek1),imagesy($obrazek1)); // obrazek roboczy
  59.  
  60. naloz($obrazek1,$obrazek2,$obrazek,$alpha,$nakryj,50);
  61.  
  62. Header('Content-type: image/jpeg'); // ustawienie Content-type (nagłówek dla przeglądarki)
  63. ImageJpeg($obrazek); // przesłanie do przeglądarki obrazka
  64.  
  65. ImageDestroy($obrazek1); // zniszcz je !
  66. ImageDestroy($obrazek2);
  67. ImageDestroy($obrazek);
  68.  
  69. ?>
Cezar708
Szczerze mówiąc nie czytałem Twojego kodu. Na pewno masz tam gdzieś możliwość robienia offsetu, czyli współrzędnych X i Y gdzie ma się cos zaczynać, więc jeśli tak masz to po prostu oblicz wysokość i szerokość obrazków: zewnętrznego i wewnętrznego i od siebie odejmij te wartości powstanie dzięki temu uzyskasz te wartości offsetu, które Cię interesują.
mefjiu
Właśnie robiłem tak jak mówisz i obrazek robił sie czarny, znając moje możliwości to zapewne coś po drodze zepsułem kolejność zmiennych lub coś innego.
Cezar708
hmm widzę tu jeden problem:

zmień odpowiednią linijkę na
  1. <?php
  2. function naloz($obrazek1,$obrazek2, &$obrazek,$alpha=50,$nakryj=false,$tolerance=2)
  3. ?>

chodzi o ampersand przed $obrazek, bo w Twoim przypadku po prostu tworzysz pusty obrazek i nic do niego nie wpisujesz, tylko podajesz to jako parametr. Należy pamiętać, że wewnątrz funkcji tworzy się kopia i nie ma wpływu na to co się z nią dzieje poza funkcją, chyba że za pomocą & to wymusisz.
mefjiu
nie bardzo rozumiem co ma jedno do drugiego ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.