Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi
Tadek888
post
Post #2





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

Posty w temacie


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: 16.10.2025 - 06:38