Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tworzenie miniaturek PNG z obrazków JPG bez zapisywania
Tadek888
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 21.04.2009
Skąd: Białogóra

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


Mam tutaj działający kod który tworzy miniaturkę z obrazka jpg bez jej zapisywania - htaccess: RewriteRule ^obrazki/([^-]+)/([^-]+)$ imgs.php?size=$1&id=$2 [L]
  1. <?PHP // kod działa idealnie
  2. header("Content-type: image/jpeg");
  3.  
  4. $file = $_GET['id'];
  5. $dir = 'imgs/';
  6. $n_size = $_GET['size'];
  7.  
  8. function pic_res($file, $dir){
  9. $temp_res_tmp = getimagesize($dir.$file);
  10. return $temp_res_tmp;
  11. }
  12.  
  13. function photo_resize_without_saving($file, $dir, $n_size){
  14. $pic_res = pic_res($file, $dir);
  15. $pic_w = $pic_res[0]; $pic_h = $pic_res[1];
  16.  
  17. if(($pic_w > $pic_h)&&($pic_w > $n_size)){ //poziome
  18. $pic_wn = $n_size;
  19. $divisor = ($pic_w/$pic_wn);
  20. $pic_hn = round($pic_h/$divisor);
  21. }
  22. elseif(($pic_w < $pic_h)&&($pic_h > $n_size)){ //pionowe
  23. $pic_hn = $n_size;
  24. $divisor = ($pic_h/$pic_hn);
  25. $pic_wn = round($pic_w/$divisor);
  26. }
  27. else{ // jesli mniejszy niż 800px
  28. $pic_wn = $pic_w;
  29. $pic_hn = $pic_h;
  30. }
  31.  
  32. $pic = imagecreatefromjpeg($dir.$file);
  33. $new_size = imagecreatetruecolor($pic_wn, $pic_hn);
  34. imagecopyresampled($new_size, $pic, 0, 0, 0, 0, $pic_wn, $pic_hn, imagesx($pic), imagesy($pic));
  35. $save = NULL;
  36. $new_photo = imagejpeg($new_size, $save, 100);
  37. return $new_photo;
  38. }
  39.  
  40. echo photo_resize_without_saving($file, $dir, $n_size);
  41. ?>


teraz kolejna sprawa chciałbym tworzyć przezroczysty obrazek png na zasadzie
rozmiar jest stały $full = array('383','174'); width/height
na przezroczystym obrazku png tworzę miniaturkę jpg (nie poobcinaną - całość widoczna), która jest idealnie wycentrowana. Z centrowaniem sobie poradzę ale lipa wychodzi jeśli chcę zmienić jej wymiary - imagecopyresampled dla jpg

znalazłem coś takiego:
  1. $dest = imagecreatefrompng('mapCanvas.png');
  2. $src = imagecreatefromjpeg('si.jpg');
  3. imagealphablending($dest, false);
  4. imagesavealpha($dest, true);
  5.  
  6. imagecopymerge($dest, $src, 17, 13, 0, 0, 60, 100, 100);
  7.  
  8. header('Content-Type: image/png');
  9. imagepng($dest);
  10.  
  11. imagedestroy($dest);
  12. imagedestroy($src);
  13.  


więc przerobiłem na:
  1.  
  2. header('Content-Type: image/png');
  3.  
  4. $file = $_GET['id'];
  5. $dir = 'imgs/';
  6. $full = array('383','174');
  7. $max = array('363','154');
  8.  
  9. function pic_res($file, $dir){
  10. $temp_res_tmp = getimagesize($dir.$file);
  11. return $temp_res_tmp;
  12. }
  13.  
  14. function new_png($dir, $file, $max, $full){
  15. $pic_res = pic_res($file, $dir);
  16. $pic_w = $pic_res[0]; $pic_h = $pic_res[1];
  17.  
  18. if($pic_w > $pic_h){ //poziome
  19. $pic_wn = $max[0];
  20. $divisor = ($pic_w/$pic_wn);
  21. $pic_hn = round($pic_h/$divisor);
  22. }
  23. elseif($pic_w < $pic_h){ //pionowe
  24. $pic_hn = $max[1];
  25. $divisor = ($pic_h/$pic_hn);
  26. $pic_wn = round($pic_w/$divisor);
  27. }
  28.  
  29. $dest = imagecreatefrompng('map.png');
  30. $src = imagecreatefromjpeg($dir.$file);
  31. //$new_size = imagecreatetruecolor($pic_wn, $pic_hn);
  32. //imagecopyresampled($new_size, $src, 0, 0, 0, 0, $pic_wn, $pic_hn, imagesx($pic), imagesy($pic));
  33.  
  34. imagealphablending($dest, false);
  35. imagesavealpha($dest, true);
  36. imagecopymerge($dest, $src, 17, 13, 0, 0, 60, 100, 100);
  37. imagepng($dest);
  38. imagedestroy($dest);
  39. imagedestroy($src);
  40. }
  41.  
  42. echo new_png($dir, $file, $max, $full);


Ktoś pomoże ?

Ten post edytował Tadek888 6.05.2011, 13:50:31
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Czy aby nie chodzi Ci o coś w stylu...
Wybieramy większy z boków jpg. Liczymy stosunek tego boku względem analogicznego w png. Jesli okazuje się, że jpg jest większy od png, skalujemy go zgodnie z wyliczonym ratio i centrujemy na png. Jeśli mniejszy, po prostu centrujemy smile.gif Tak więc jedyna róznica to fakt że raz użyjemy przed zapisem na png owego jpg ze skalowaniem, a raz nie. Podaję tylko tyle bo, jak sam napisałeś, z centrowaniem sobie poradzisz smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Tadek888
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 21.04.2009
Skąd: Białogóra

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


Tak tylko że jeśli chcę przesamplować JPG przy towrzeniu PNG to albo wyskakuje błąd albo sam JPG.
Rozwiązanie na samym dole działa ale pokazuje mi tylko urywek mojego JPG.

  1. function new_png($dir, $file, $max, $full){
  2. $pic_res = pic_res($file, $dir);
  3. $pic_w = $pic_res[0]; $pic_h = $pic_res[1];
  4.  
  5. if($pic_w > $pic_h){ //poziome
  6. $pic_wn = $max[0];
  7. $divisor = ($pic_w/$pic_wn);
  8. $pic_hn = round($pic_h/$divisor);
  9. }
  10. elseif($pic_w < $pic_h){ //pionowe
  11. $pic_hn = $max[1];
  12. $divisor = ($pic_h/$pic_hn);
  13. $pic_wn = round($pic_w/$divisor);
  14. }
  15.  
  16. $dest = imagecreatefrompng('map.png');
  17. $src = imagecreatefromjpeg($dir.$file);
  18. //$new_size = imagecreatetruecolor($pic_wn, $pic_hn);
  19. //imagecopyresampled($new_size, $src, 0, 0, 0, 0, $pic_wn, $pic_hn, imagesx($pic), imagesy($pic));
  20.  
  21. imagealphablending($dest, false);
  22. imagesavealpha($dest, true);
  23. imagecopymerge($dest, $src, 17, 13, 0, 0, 60, 100, 100);
  24. imagepng($dest);
  25. imagedestroy($dest);
  26. imagedestroy($src);
  27. }

jeśli zastąpie
  1. $src = imagecreatefromjpeg($dir.$file);


na:
  1. $src = imagecreatefromjpeg(DOMENA.'obrazki/200/'.$file);

w sensie jak użyję skryptu na samej górze do przerabiania JPG to też wyskakuje błąd
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 - 13:59