Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] imagecreatefromjpeg - skalowanie
Forum PHP.pl > Forum > PHP
chomiczek
Problem dot. tworzenia miniatur za pomocą fukcji imagecreatefromjpeg.. W tym konkretnym przypadku orginał ma wielkość 627x500px i podczas tworzenia miniaturki po jego prawej stronie powstaje coś na wzór cienia (czarny pasek).. podczas tworzenia miniatur z grafiki x=y wszystko jest ok.. Skąd problem i jak go przeskoczyć??

Jak to wygląda możecie zobaczyć na stronie http://www.promedia.iap.pl/ardik/
chodzi o te zdjęcia w prawym dolnym rogu.
crash
Podziel się z nami Twoim kodem, będzie łatwiej pomóc.
scanner
Przenoszę: Skrypty -> php
chomiczek
Więc kod wygląda mniej więcej tak:
<?php
$x = $_GET["roz"];
$plik = $_GET["plik"];
//echo $plik;
if ($plik<>"") {
header("Content-type: image/jpg");
$zdj = imagecreatefromjpeg("img/mens/".$plik."");
$zdjx = imagesx($zdj);
$zdjy = imagesy($zdj);
$y = ceil($zdjy*($x/$zdjx));
$nowezdj = imagecreatetruecolor($x,$y);
imagecopyresized($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
imagejpeg($nowezdj,"",50);
exit;
}
?>
a zdjęcia są wyswietlane w następujący sposób:
<?php
echo "<img src=\"index.php?plik=".$file."&roz=90\">";
?>
podobna sytuacja ma sie na podstronie MSKIE (tam są de facto te same zdjęcia)
crash
Może floor zamiast ceil przy obliczaniu $y
stoprocent
  1. <?
  2.  header(&#092;"Content-type: image/jpg\");
  3. $im_src=@imagecreatefromjpeg($img); 
  4. $srcx=@imagesx($im_src); 
  5. $srcy=@imagesy($im_src); 
  6.  
  7.  
  8. if($srcy > $srcx) { 
  9.  
  10. $ile = $srcy/$_GET[&#092;"roz\"];
  11.  
  12. $szerokosc = $srcx/$ile; 
  13. $wysokosc = $srcy/$ile; 
  14.  
  15. } else { 
  16.  
  17. $ile = $srcx/$_GET[&#092;"roz\"]; 
  18. $szerokosc = $srcx/$ile; 
  19. $wysokosc = $srcy/$ile; 
  20.  
  21. } 
  22.  
  23. $im_doc=imagecreatetruecolor($szerokosc,$wysokosc); 
  24. @imagecopyResampled($im_doc,$im_src,0,0,0,0,$szerokosc,$wysokosc,$srcx,$srcy); 
  25. imagejpeg($im_doc,'',89);
  26. ImageDestroy($im_doc);
  27.  
  28.  
  29. ?>


To rozwiazanie jest jak dla mnie najlepsze napisalem kiedys sobie taki skrypcik
dziala on tak iz jesli x jest dluzsze od y to tworzy miniature gdzie dl x jest zdefiniowana wczesniej a y odpowiednia , a jesli y jest wieksze od x to na odwrot.

//edit

Poza tym uzywasz imagecopyresized co obniza jakosc miniatury
teraz uzywa sie resampled

Tak czy tak tu masz przyklad dzialania mojego skryptu
LINK
lubmich
Dalej bawiac sie w arytmetyke... przy zadanych graniczeiach an x i y winksmiley.jpg

  1. <?php
  2. $img=imagecreatefromjpeg($foto[tmp_name]);
  3. $max_x=$_GET[&#092;"x\"];
  4. $max_y=$_GET[&#092;"y\"];
  5. $img_x=imagesx($img);
  6. $img_y=imagesy($img);
  7. $x=$max_x;
  8. $y=floor($img_y*($x/$img_x));
  9. if($y>$max_y){
  10. $y=$max_y;
  11. $x=floor($img_x*($y/$img_y));
  12. }
  13. $foto_str=imagecreatetruecolor($x,$y);
  14.  
  15. ?>



dalsza czesc mojego kodu... czy powinno sie to robicinaczej czy tak tez jest poprawnie?
  1. <?php
  2. imagecopyresampled($foto_str,$img,0,0,0,0,$x,$y,$img_x,$img_y);
  3. imagejpeg($foto_str,&#092;"\",80);
  4. $foto_str = addslashes (ob_get_contents());
  5.  
  6. ?>

$foto_str wysylam potem do bazy...
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.