Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tworzenie miniatur, proporcjonalnosc ;)
bumfank
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 29.02.2004
Skąd: /dev/null

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


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

Ten post edytował bumfank 8.08.2005, 23:17:17


--------------------
Drukuj24.pl - Drukowanie to koszt
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Poszukaj na forum. Sam podrzuciłem dwie funkcje - jedna skaluje propocjonalnie via szerokość, druga wysokość.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
bumfank
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 29.02.2004
Skąd: /dev/null

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


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


--------------------
Drukuj24.pl - Drukowanie to koszt
Go to the top of the page
+Quote Post
elv
post
Post #4





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

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


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.
Go to the top of the page
+Quote Post
-SaraniS-
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 2.01.2005
Skąd: Opolskie

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


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


--------------------
Workstation: Hardware: Toshiba Satellite L40-14B Software: Linux 2.6.30.3 - Slackware 12.2 - KDE3.5.10
Server: Hardware: Celeron 850MHz/ 256MiB Software: Linux 2.4.31 - Slackware 10.2 - Apache 2.2.0.59 + PHP 5.1.6 + MySQL 5.0.24a
Go to the top of the page
+Quote Post
graft
post
Post #6





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Black-Berry
post
Post #8





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


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


--------------------
Go to the top of the page
+Quote Post
graft
post
Post #9





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


Dzięki Panowie, o to mi chodziło guitar.gif
Go to the top of the page
+Quote Post
Bajki
post
Post #10





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


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...
Go to the top of the page
+Quote Post
nagula
post
Post #11





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

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


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. ?>
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: 19.08.2025 - 14:51