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

Posty w temacie


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

 



RSS Aktualny czas: 16.09.2025 - 17:40