Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomniejszanie obrazów JPEG
Forum PHP.pl > Forum > Gotowe rozwiązania
rafalopii
Szukam skryptu php który by zmniejszał obrazy .jpg
Przykładowo z rozdzielczości 1600x1200 na 640x480 pixela.
Proszę o pomoc...
Z góry wielkie dzięki
mike
Kiedyś napisałem takie coś co zmniejszało obrazki, jak chcesz to możesz sobie to przerobić.

Struktura katalogów:
+ sktypt
- images (dir )
- config.php
- image.php
- index.php

A teraz pliki:

config.php
  1. <?php
  2.  
  3. define('IMG_DIR', 'images');
  4. define('SIZE', 200);
  5. define('COLS', 3);
  6.  
  7.  
  8. function FindFiles($dir)
  9. {
  10. $katalog = opendir($dir);
  11. if ( !$katalog )
  12. {
  13. return false;
  14. }
  15.  
  16. $files = array();
  17. while ( ( $file = readdir( $katalog ) ) !== false )
  18. {
  19. if ( !( $file=='.' || $file == '..' ) )
  20. {
  21. $files[] = basename($file);
  22. }
  23. }
  24. closedir( $katalog );
  25. return $files;
  26. }
  27.  
  28. ?>


image.php
  1. <?php
  2.  
  3. require_once('config.php');
  4.  
  5. $img_name = strtolower($_GET['img']);
  6.  
  7. if ( strpos($img_name, 'jpg') != 0)
  8. {
  9. $img = imagecreatefromjpeg(IMG_DIR.'/'.$img_name);
  10. $img_type = 'jpg';
  11. }
  12. elseif ( strpos($img_name, 'png') != 0)
  13. {
  14. $img = imagecreatefrompng(IMG_DIR.'/'.$img_name);
  15. $img_type = 'png';
  16. }
  17. elseif ( strpos($img_name, 'gif') != 0)
  18. {
  19. $img = imagecreatefromgif(IMG_DIR.'/'.$img_name);
  20. $img_type = 'gif';
  21. }
  22.  
  23. $img_w = imagesx($img); //szerokość obrazka
  24. $img_h = imagesy($img); //wysokość obrazka
  25.  
  26. $ratio = $img_w / $img_h;
  27.  
  28. if ( $ratio > 1 )
  29. {
  30. $new_img_w = SIZE;
  31. $new_img_h = ( SIZE / $ratio);
  32. }
  33. else
  34. {
  35. $new_img_w = ( SIZE * $ratio);
  36. $new_img_h = SIZE;
  37. }
  38.  
  39. $temp_img = imagecreatetruecolor($new_img_w, $new_img_h);
  40. imagecopyresized($temp_img, $img, 0, 0, 0, 0, $new_img_w, $new_img_h, $img_w, $img_h);
  41.  
  42. switch ( $img_type )
  43. {
  44. case 'jpg': header(&#092;"Content-type: image/jpeg\");
  45. case 'gif': header(&#092;"Content-type: image/gif\");
  46. case 'png': header(&#092;"Content-type: image/png\");
  47. }
  48.  
  49. header(&#092;"Cache-Control: post-check=0, pre-check=0\", false);
  50. header(&#092;"Pragma: no-cache\");
  51.  
  52. switch ( $img_type )
  53. {
  54. case 'jpg': imagejpeg($temp_img);
  55. case 'gif': imagegif($temp_img);
  56. case 'png': imagepng($temp_img);
  57. }
  58.  
  59. ImageDestroy($img);
  60. ImageDestroy($temp_img);
  61.  
  62. ?>


index.php
  1. <?php
  2.  
  3. require_once('config.php');
  4.  
  5.  
  6. if($_GET['action'] != 'jeden')
  7. {
  8. $pliki = FindFiles(IMG_DIR);
  9.  
  10. echo '<br><br>';
  11. echo '<table border=\"1\" align=\"center\">';
  12. echo '<tr>';
  13.  
  14. for($i = 1; $i <= sizeof($pliki); $i++)
  15. {
  16. echo '<td align=\"center\">';
  17. echo '<a href=\"index.php?action=jeden&img='.$pliki[$i-1].'\"><img src=\"image.php?img='.$pliki[$i-1].'\"></a>';
  18. echo '</td>';
  19. if ( ( $i % COLS ) == 0 )
  20. {
  21.  echo '</tr><tr>';
  22. }
  23. }
  24. }
  25. else
  26. {
  27. echo '<a href=\"index.php\"><img src=\"'.IMG_DIR.'/'.$_GET['img'].'\"></a>';
  28. }
  29.  
  30. ?>


No i teraz opis działania:
Skrypt skanuje folder images w poszukiwaniu plików z obrazkami i wyświetla ich miniaturki. Po kliknięciu w miniaturkę dostajemy oryginał.
czachor
mała uwaga: zamiast imagecopyresized() proponuję używać imagecopyresampled" title="Zobacz w manualu PHP" target="_manual - duża różnica w jakości obrazka po pomniejszeniu
harmag
Cytat(czachor @ 2004-10-27 12:08:01)
mała uwaga: zamiast imagecopyresized() proponuję używać imagecopyresampled" title="Zobacz w manualu PHP" target="_manual - duża różnica w jakości obrazka po pomniejszeniu

dzieki ! w koncu nie mam takich poszarpanych miniaturek smile.gif
militis
Wałkowane było na forum juz kilkadziesiat razy.
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-2024 Invision Power Services, Inc.