Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie miniatur, proporcjonalnosc ;)
Forum PHP.pl > Forum > PHP
bumfank
Witam serdecznie smile.gif Napisalem skrypta ( prawie ;P ) w oparciu o klase resizeImage, skrypt uploaduje zdjecie, wrzuca na serwer oryginal size i w 2 mniejszych wersjach, ale problem tkwi w tym zeby dopasowywal zdjecie, zeby byly zachowane proporcje czyli np zdefiniowac sama szerokosc na 200 wtedy on dlugosc sam ustawi wedlug wielkosci zdjecia, nie wiem jak to zrobic, szukalem na googlach o tej proporcjonalnosci ale nic nie znalazlem, oczywiscie moglem zle szukac, niech ktos mnie poprawi winksmiley.jpg
nizej caly skrypt co i jak smile.gif

prosze o pomoc

  1. <?php
  2.  
  3. if($opcja == 'form')
  4. {
  5. <form enctype="multipart/form-data"
  6.  method="post" action="?send=Wyslij">
  7.  <input name="src" type="file">
  8.  <br><input type="submit" value="Wyslij" name="send"><input type="reset" value="Kasuj" name="B2"></form>
  9. ";
  10.  
  11. }
  12.  
  13. if($send == 'Wyslij') {
  14.  
  15.  
  16. $strUploadDir = 'images/artist/' . $_FILES['src']['name'];
  17. $strUploadDir2 = 'images/artist/th_' . $_FILES['src']['name'];
  18. $strUploadDir3 = 'images/artist/th2_' . $_FILES['src']['name'];
  19. move_uploaded_file( $_FILES['src']['tmp_name'], $strUploadDir );
  20.  
  21. function imgType($name)
  22. {
  23.  if(substr($name, -4, 4) == '.jpg' || substr($name, -4, 4) == 'jpeg')
  24.  {
  25. return "IMAGETYPE_JPEG";
  26.  }
  27.  elseif(substr($name, -4, 4) == '.gif')
  28.  {
  29. return "IMAGETYPE_GIF";
  30.  }
  31.  elseif(substr($name, -4, 4) == '.png')
  32.  {
  33. return "IMAGETYPE_PNG";
  34.  }
  35. }
  36.  
  37. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  38. {
  39.  /*
  40. * source - obrazek jpeg
  41. * max_x - maksymalna szerokosc pomniejszonego obrazka
  42. * max_y - maksymalna dlugosc pomniejszonego obrazka
  43. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  44. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  45. */
  46.  
  47. if(imgType($source) == "IMAGETYPE_JPEG")
  48. {
  49.  $img_src = imagecreatefromjpeg($source);
  50. }
  51. elseif(imgType($source) == "IMAGETYPE_GIF")
  52. {
  53.  $img_src = imagecreatefromgif($source);
  54. }
  55. elseif(imgType($source) == "IMAGETYPE_PNG")
  56. {
  57.  $img_src = imagecreatefrompng($source);
  58. }
  59. else
  60. {
  61.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  62. }
  63.  
  64.  $image_x = imagesx($img_src);
  65.  $image_y = imagesy($img_src);
  66.  if($image_x > $image_y) // Landscape
  67.  {
  68. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  69. $ratio_y = $ratio_x;
  70. $move = 'y';
  71.  }
  72.  else // Portrait
  73.  {
  74. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  75. $ratio_x = $ratio_y;
  76. $move = 'x';
  77.  }
  78. $new_x = $image_x*$ratio_x;
  79. $new_y = $image_y*$ratio_y;
  80.  
  81. $move_x = ($move == "x") ? ($max_x-$new_x)/: 0;
  82. $move_y = ($move == "y") ? ($max_y-$new_y)/: 0;
  83.  
  84. $new_img = imagecreatetruecolor($max_x, $max_y);
  85. $background = imagecolorallocate($new_img, 255, 255, 255);
  86. imagefill($new_img, 0, 0, $background);
  87. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  88.  
  89. if(imgType($save_image) == "IMAGETYPE_JPEG")
  90. {
  91.  imagejpeg($new_img, $save_image, 100);
  92. }
  93. elseif(imgType($save_image) == "IMAGETYPE_GIF")
  94. {
  95.  imagegif($new_img, $save_image);
  96. }
  97. elseif(imgType($save_image) == "IMAGETYPE_PNG")
  98. {
  99.  imagepng($new_img, $save_image);
  100. }
  101.  
  102. }
  103.  
  104. resizeImage($strUploadDir, 200, 100, $strUploadDir2, 100);
  105. echo'<img src="'.$strUploadDir2.'" alt="">';
  106.  
  107. resizeImage($strUploadDir, 100, 80, $strUploadDir3, 100);
  108. echo'<img src="'.$strUploadDir3.'" alt="">';
  109.  
  110.  
  111.  
  112.  
  113.  
  114. }
  115. ?>



dzieki za pomoc winksmiley.jpg

pozdrawiam exclamation.gif smile.gif
NuLL
Poszukaj na forum. Sam podrzuciłem dwie funkcje - jedna skaluje propocjonalnie via szerokość, druga wysokość.
bumfank
jak ladnie dziala smile.gif
dzieki Null smile.gif poprawilem ten skrypt bo robil z gifow jpgki a tak nie moge wiec poprawilem, uderze nizej skrypt jakby sie komus przydalo winksmiley.jpg

  1. <?php
  2.  
  3.  
  4. if($opcja == 'form')
  5. {
  6. <form enctype="multipart/form-data"
  7.  method="post" action="?send=Wyslij">
  8.  <input name="src" type="file">
  9.  <br><input type="submit" value="Wyslij" name="send"><input type="reset" value="Kasuj" name="B2"></form>
  10. ";
  11.  
  12. }
  13. if($send == 'Wyslij') {
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. $strUploadDir = 'images/artist/' . $_FILES['src']['name'];
  21. $strUploadDir2 = 'images/artist/th_' . $_FILES['src']['name'];
  22. $strUploadDir3 = 'images/artist/th2_' . $_FILES['src']['name'];
  23. move_uploaded_file( $_FILES['src']['tmp_name'], $strUploadDir );
  24.  
  25.  
  26.  
  27.  
  28. echo 'Plik został pomyślnie uploadowany! <br />';
  29.  echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . print_r( $_FILES, true ) . '</pre>';
  30.  
  31.  
  32.  
  33. function create_thumb_wfixed($file_name_src, $file_name_dest, $weight,$quality=100)
  34. {
  35.  if (file_exists($file_name_src) && isset($file_name_dest))
  36.  {
  37.  $est_src = pathinfo(strtolower($file_name_src));
  38.  $est_dest = pathinfo(strtolower($file_name_dest));
  39.  $size = getimagesize($file_name_src);
  40.  $w = number_format($weight, 0, ',', '');
  41.  $h = number_format(($size[1]/$size[0])*$weight,0,',','');
  42.  
  43.  if ($est_dest['extension'] == "gif" || $est_dest['extension'] == "jpg")
  44.  {
  45.  $file_name_dest = substr_replace($file_name_dest, 'jpg', -3);
  46.  $dest = imagecreatetruecolor($w, $h);
  47.  //imageantialias($dest, TRUE);
  48.  } elseif ($est_dest['extension'] == "png")
  49.  {
  50.  $dest = imagecreatetruecolor($w, $h);
  51.  //imageantialias($dest, TRUE);
  52.  } else
  53.  {
  54. return FALSE;
  55.  }
  56.  
  57.  switch($size[2])
  58.  {
  59.  case 1:  //GIF
  60.  $src = imagecreatefromgif($file_name_src);
  61.  break;
  62.  case 2:  //JPEG
  63.  $src = imagecreatefromjpeg($file_name_src);
  64.  break;
  65.  case 3:  //PNG
  66.  $src = imagecreatefrompng($file_name_src);
  67.  break;
  68.  default:
  69.  return FALSE;
  70.  break;
  71.  }
  72.  imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
  73.  
  74.  switch($size[2])
  75.  {
  76.  case 1:
  77. imagegif($dest,$file_name_dest);
  78.  case 2:
  79.  imagejpeg($dest,$file_name_dest, $quality);
  80.  break;
  81.  case 3:
  82.  imagepng($dest,$file_name_dest);
  83.  }
  84.  return TRUE;
  85.  }
  86.  return FALSE;
  87. }
  88.  
  89.  
  90.  
  91.  
  92. create_thumb_wfixed($strUploadDir, $strUploadDir, $weight=500,$quality=90);
  93.  
  94. create_thumb_wfixed($strUploadDir, $strUploadDir2, $weight=250,$quality=90);
  95.  
  96. create_thumb_wfixed($strUploadDir, $strUploadDir3, $weight=80,$quality=90);
  97.  
  98.  
  99. echo'<img src="'.$strUploadDir.'" alt=""><br><img src="'.$strUploadDir2.'" alt=""><br><img src="'.$strUploadDir3.'" alt="">';
  100.  
  101.  
  102.  
  103.  
  104.  
  105. }
  106.  
  107.  
  108. ?>


skrypt ma buga jakiegos nei wiem czy to specjalnie czy nie ale gify zmienia na jpgki, dokladniej u mnie to jest tak ze uploaduje gifa na serwer najpierw pozniej tworzy duza miniaturke 500 z gifa, dalej z gifa tworzy 250 i 80, czyli na serwerze sa 4 pliki: gif, 3xjpg, jpgki tworzy normalnie smile.gif
elv
Do sprawdzenia typu pliku lepiej jest użyć $_FILES['src']['type'] zamiast opierać się na sprawdzaniu rozszerzenia w nazwie pliku - może być niezgodne z faktycznym typem pliku.
-SaraniS-
Witam
Ja to mam tak rozwiazane:
  1. <?php
  2.  
  3.  /*
  4. * source - obrazek jpeg
  5. * max_x - maksymalna szerokosc pomniejszonego obrazka
  6. * max_y - maksymalna dlugosc pomniejszonego obrazka
  7. */
  8. if(exif_imagetype($source) == IMAGETYPE_JPEG){
  9. $img_src = imagecreatefromjpeg($source);
  10. }elseif(exif_imagetype($source) == IMAGETYPE_GIF){
  11. $img_src = imagecreatefromgif($source);
  12. }elseif(exif_imagetype($source) == IMAGETYPE_PNG){
  13. $img_src = imagecreatefrompng($source);
  14. }else{
  15. die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  16. }
  17. $image_x = imagesx($img_src);
  18. $image_y = imagesy($img_src);
  19. if($image_x > $image_y){ //landscape
  20. $ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;
  21. }else{ //portrait
  22. $ratio = ($image_y > $max_y) ? $max_y/$image_y : 1;
  23. }
  24. $new_x = $image_x*$ratio;
  25. $new_y = $image_y*$ratio;
  26. $new_img = imagecreatetruecolor($new_x, $new_y);
  27. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y);
  28. if(exif_imagetype($source) == IMAGETYPE_JPEG){
  29. header('Content-type: image/jpeg');
  30. imagejpeg($new_img);
  31. }elseif(exif_imagetype($source) == IMAGETYPE_GIF){
  32. header('Content-type: image/gif');
  33. imagegif($new_img);
  34. }elseif(exif_imagetype($source) == IMAGETYPE_PNG){
  35. header('Content-type: image/png');
  36. imagepng($new_img);
  37. }
  38. ImageDestroy($img_src);
  39. ImageDestroy($new_img);
  40.  
  41. ?>

max_x i max_y podajemy podczas wywolania, jakie rozmiary nas interesuja. Skrypt skaluje tak, by dluzszy bo miescil sie w okreslonym rozmiarze, a mniejszy odpowiednio proporcjonalnie.
Pozdrawiam smile.gif
graft
Odświeżę nieco temat...

Chciałbym wygenerować wszystkie miniatury o jednakowych wymiarach. Zdjęcia pionowe niestety są wtedy nieproporcjonalne. Interesuje mnie wycięcie części zdjęcia o określonych wymiarach. Jest na to sposób?

Moja funkcja:
  1. <?php
  2. function ResizeJPG($stary_jpg)
  3. {
  4. $rozmiar = GetImageSize($stary_jpg);
  5. $stary = ImageCreateFromJPEG($stary_jpg);
  6.  
  7. $nowa_szerokosc = 120;
  8. $nowa_wysokosc = 90;
  9.  
  10. $nowy_jpg = ImageCreateTrueColor($nowa_szerokosc, $nowa_wysokosc);
  11.  
  12. ImageCopyResampled($nowy_jpg, $stary, 0, 0, 0, 0, $nowa_szerokosc, $nowa_wysokosc, $rozmiar['0'], $rozmiar['1']);
  13.  
  14. ImageDestroy($stary);
  15.  
  16. return $nowy_jpg;
  17. ImageDestroy($nowy_jpg);
  18. }
  19. ?>
nospor
hehe, doslownie wczoraj robilem to bo mi tez bylo potrzebne smile.gif

  1. <?php
  2. function ResizeJPG($stary_jpg)
  3. {
  4. $rozmiar = GetImageSize($stary_jpg);
  5. $stary = ImageCreateFromJPEG($stary_jpg);
  6. $width = $rozmiar[0];
  7. $height = $rozmiar[1];
  8. $nowa_szerokosc = 120;
  9. $nowa_wysokosc = 90;
  10.  
  11. $scaleW = $nowa_szerokosc/$width;
  12. $scaleH = $nowa_wysokosc/$height;
  13. if ($scaleW < $scaleH)
  14. $width = round($nowa_szerokosc / $scaleH);
  15. elseif ($scaleH < $scaleW)
  16. $height = round($nowa_wysokosc / $scaleW);
  17.  
  18.  
  19.  
  20. $nowy_jpg = ImageCreateTrueColor($nowa_szerokosc, $nowa_wysokosc);
  21.  
  22. ImageCopyResampled($nowy_jpg, $stary, 0, 0, 0, 0, $nowa_szerokosc, $nowa_wysokosc, $width, $height);
  23.  
  24. ImageDestroy($stary);
  25.  
  26. return $nowy_jpg;
  27.  
  28. }
  29. ?>
Black-Berry
pozwolę sobie wkleić kod który dziś znalazłem bo jest dość fajny. Generuje obciętą miniaturkę.

  1. <?php
  2. cropImage(225, 165, '/path/to/source/image.jpg', 'jpg', '/path/to/dest/image.jpg');
  3. function cropImage($nw, $nh, $source, $stype, $dest) {
  4. $size = getimagesize($source);
  5. $w = $size[0];
  6. $h = $size[1];
  7. switch($stype) {
  8. case 'gif':
  9. $simg = imagecreatefromgif($source);
  10. break;
  11. case 'jpg':
  12. $simg = imagecreatefromjpeg($source);
  13. break;
  14. case 'png':
  15. $simg = imagecreatefrompng($source);
  16. break;
  17. }
  18. $dimg = imagecreatetruecolor($nw, $nh);
  19. $wm = $w/$nw;
  20. $hm = $h/$nh;
  21. $h_height = $nh/2;
  22. $w_height = $nw/2;
  23. if($w> $h) {
  24. $adjusted_width = $w / $hm;
  25. $half_width = $adjusted_width / 2;
  26. $int_width = $half_width - $w_height;
  27. imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
  28. } elseif(($w <$h) || ($w == $h)) {
  29. $adjusted_height = $h / $wm;
  30. $half_height = $adjusted_height / 2;
  31. $int_height = $half_height - $h_height;
  32. imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
  33. } else {
  34. imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
  35. }
  36. imagejpeg($dimg,$dest,100);
  37. }
  38. ?>
graft
Dzięki Panowie, o to mi chodziło guitar.gif
Bajki
Troche odświerze winksmiley.jpg
Odnośnie skryptu SaraniS-a ...dlaczego wyskakuje mi błąd, że funkcja exif_imagetype jest nieznana ? wg. dokumentacji nie potrzeba php5 a innych przyczyn nie widze...
nagula
Witam,

Mam problem z kodem od Black-Berry.
Jest świetny, na sucho działa idealnie, ale chciałbym go lekko zautomatyzować, aby miniaturka robiła się automatycznie przy dodawaniu pliku, jednak - kicha.

Dodałem upload, próbuje dodać zmienne do funkcji cropowania i wywala błąd "Fatal error: Call to undefined function: cropimage()"

Próbowałem już chyba na wszystkie sposoby. Czy tak się w ogolę da? - help! smile.gif

  1. <div>
  2. <form enctype="multipart/form-data" method="POST">
  3. <input type="hidden" name="MAX_FILE_SIZE" value="50000" />
  4. <input name="plik" type="file" />
  5. <input type="submit" value="Wyślij plik" />
  6. </form>
  7. </div>
  8.  
  9. <?php
  10. $plik_tmp = $_FILES['plik']['tmp_name'];
  11. $plik_nazwa = $_FILES['plik']['name'];
  12. $plik_rozmiar = $_FILES['plik']['size'];
  13.  
  14. if(is_uploaded_file($plik_tmp)) {
  15. move_uploaded_file($plik_tmp, "duze/$plik_nazwa");
  16. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  17. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  18.  
  19. $duze = "/duze/$plik_nazwa";
  20. $male = "/male/$plik_nazwa";
  21.  
  22. cropImage(225, 165, $duze, 'jpg', $male);
  23. function cropImage($nw, $nh, $source, $stype, $dest) {
  24. $size = getimagesize($source);
  25. $w = $size[0];
  26. $h = $size[1];
  27. switch($stype) {
  28. case 'gif':
  29. $simg = imagecreatefromgif($source);
  30. break;
  31. case 'jpg':
  32. $simg = imagecreatefromjpeg($source);
  33. break;
  34. case 'png':
  35. $simg = imagecreatefrompng($source);
  36. break;
  37. }
  38. $dimg = imagecreatetruecolor($nw, $nh);
  39. $wm = $w/$nw;
  40. $hm = $h/$nh;
  41. $h_height = $nh/2;
  42. $w_height = $nw/2;
  43. if($w> $h) {
  44. $adjusted_width = $w / $hm;
  45. $half_width = $adjusted_width / 2;
  46. $int_width = $half_width - $w_height;
  47. imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
  48. } elseif(($w <$h) || ($w == $h)) {
  49. $adjusted_height = $h / $wm;
  50. $half_height = $adjusted_height / 2;
  51. $int_height = $half_height - $h_height;
  52. imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
  53. } else {
  54. imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
  55. }
  56. imagejpeg($dimg,$dest,100);
  57. }
  58. }
  59. ?>
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.