Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] imagecreatefromjpeg - skalowanie, Problem dot. skalowania zdjęć
chomiczek
post
Post #1





Grupa: Zarejestrowani
Postów: 271
Pomógł: 4
Dołączył: 5.01.2005

Ostrzeżenie: (0%)
-----


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.


--------------------
created by chomiczek
Go to the top of the page
+Quote Post
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Podziel się z nami Twoim kodem, będzie łatwiej pomóc.


--------------------
Go to the top of the page
+Quote Post
scanner
post
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Przenoszę: Skrypty -> php


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
chomiczek
post
Post #4





Grupa: Zarejestrowani
Postów: 271
Pomógł: 4
Dołączył: 5.01.2005

Ostrzeżenie: (0%)
-----


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)


--------------------
created by chomiczek
Go to the top of the page
+Quote Post
crash
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Może floor zamiast ceil przy obliczaniu $y


--------------------
Go to the top of the page
+Quote Post
stoprocent
post
Post #6





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 17.05.2003
Skąd: Kraków , Londyn

Ostrzeżenie: (0%)
-----


  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

Ten post edytował nasto 5.01.2005, 20:32:47


--------------------
Go to the top of the page
+Quote Post
lubmich
post
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 14.05.2005

Ostrzeżenie: (0%)
-----


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...

Ten post edytował lubmich 14.05.2005, 23:34:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 06:37