Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> Miniaturka JPEG/GIF/PNG, [funkcja] php 4 i 5, gd2
tiraeth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


  1. <?php
  2. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  3. {
  4.  /*
  5. * source - obrazek jpeg
  6. * max_x - maksymalna szerokosc pomniejszonego obrazka
  7. * max_y - maksymalna dlugosc pomniejszonego obrazka
  8. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  9. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  10. */
  11.  
  12. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  13. {
  14.  $img_src = imagecreatefromjpeg($source);
  15. }
  16. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  17. {
  18.  $img_src = imagecreatefromgif($source);
  19. }
  20. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  21. {
  22.  $img_src = imagecreatefrompng($source);
  23. }
  24. else
  25. {
  26.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  27. }
  28.  
  29.  $image_x = imagesx($img_src);
  30.  $image_y = imagesy($img_src);
  31.  if($image_x > $image_y) // Landscape
  32.  {
  33. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  34. $ratio_y = $ratio_x;
  35. $move = 'y';
  36.  }
  37.  else // Portrait
  38.  {
  39. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  40. $ratio_x = $ratio_y;
  41. $move = 'x';
  42.  }
  43. $new_x = $image_x*$ratio_x;
  44. $new_y = $image_y*$ratio_y;
  45.  
  46. $move_x = ($move == &#092;"x\") ? ($max_x-$new_x)/2 : 0;
  47. $move_y = ($move == &#092;"y\") ? ($max_y-$new_y)/2 : 0;
  48.  
  49. $new_img = imagecreatetruecolor($max_x, $max_y);
  50. $background = imagecolorallocate($new_img, 255, 255, 255);
  51. imagefill($new_img, 0, 0, $background);
  52. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  53.  
  54. if(exif_imagetype($save_image) == IMAGETYPE_JPEG)
  55. {
  56.  imagejpeg($new_img, $save_image, $jpeg_quality);
  57. }
  58. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  59. {
  60.  imagegif($new_img, $save_image);
  61. }
  62. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  63. {
  64.  imagepng($new_img, $save_image);
  65. }
  66.  
  67.  echo '<img src=\"'.$save_image.'\" border=\"1\">';
  68. }
  69. ?>


użycie:
  1. <?
  2. resizeImage('obrazek_duzy.jpg', MAX_WYMIAR_X, MAX_WYMIAR_Y, 'obrazek_maly_nowy.jpg', JAKOSC_JPEG); // (5 parametr opcjonalnie dla jpg)
  3. ?>


Funkcja jest w stanie utworzyć miniaturkę z każdego obrazka jpg/jpeg, gif oraz png...
Go to the top of the page
+Quote Post
son
post
Post #2





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 31.01.2004
Skąd: Kraków

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


Sooper skrypt właśnie tego szukałem (IMG:http://forum.php.pl/style_emoticons/default/thumbsupsmileyanim.gif)
Dzięki Tiraeth naprawdę bardzo mi pomogłeś (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif)
Polecam wszystkim (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował son 23.01.2005, 20:09:18
Go to the top of the page
+Quote Post
Toom
post
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.08.2004

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


Jak to się ma do obsługi GIFów w GD2, bo słyszałem, że tam jej nie ma?
Czy ktoś testował funkcję pod tym kontem?
Go to the top of the page
+Quote Post
tiraeth
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


GD2 obsługuję GIFy.... testowałem pod kątem gifów na GD2/PHP5/APACHE2 i działało..
Go to the top of the page
+Quote Post
Kocurro
post
Post #5





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Celeme wyjaśnienia.

GD nie posiadało obsługi GIF'ów ze względów prawa patentowego. Jednakze prawo patentu zakończyło się w listopadzie zeszłego roku. I teraz w GD jest obsługa GIF'a, a nawet animowanego GIF'a. Niestety port na php nie posiada jeszcze wszystkich funkcji zaimplementowanych w standardzie - ale możliwe, że szybko dodadzą.

W każdym bądź razie w GD najnowszym jest pełna obsługa GIF'ów, z wyjatkiem animacji, która chwilowo nie jest dostępna pod php - ale już pracuje nad własną klasą do obsługi animacji, która poszerzy możliwości GD
Go to the top of the page
+Quote Post
Toom
post
Post #6





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.08.2004

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


Dowiedziałem się nawet że w 1.6 Zakończono obsługę GIF, żeby przywrócić w 2.0.28

Problem w tym, że na localhoscie (win - easyPHP1.7) mam wersję 2.0.18. Więc pytanie: Jak zainstalować nowszą? najprostsze metody mile widziane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
---------
Tymczasowo zrobiłem tak: wrzuciłem do katalogu php nową wersję php 4.3.10 z php.net.
Tylko czemu wyświetla, w gd_info:
Kod
{ ["GD Version"]=> string(27) "bundled (2.0.15 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(false) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(false) ["JPG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }  
Wynika z tego, że nie ma tu GIF Create Support
czy on tak zawsze?

Ten post edytował Toom 14.02.2005, 13:34:01
Go to the top of the page
+Quote Post
Kocurro
post
Post #7





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


php jest strasznie w plecy jeśli chodzi o GD :/

musisz zainstalować sobie patcha udostępniajacego GIFy.

a zanim php obsługży w pełni i prawidłowo najnowsze GD to jeszcze poczekamy...a tak chciałbym juz teraz animowane gify robić...ehh...
Go to the top of the page
+Quote Post
Toom
post
Post #8





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.08.2004

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


Dzięki za info (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Możesz rozwinąć kwestię patcha (skąd i jak?), bo jestem mało wprawiony w instalacjach php z apachem :/

Poza tym, znajomy Admin pisał mi, że na jego serwerze linux jest wersja 2.0.31, w planie 33, wraz z php 4.3.10, ale jeszcze testuje.
Więc chyba się da (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Jeśli chodzi o gify, nie zależy mi na animacjach jedynie, żeby można było robić miniaturki gifów.
Go to the top of the page
+Quote Post
pys1986
post
Post #9





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 18.01.2005

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


A mi to niedziala nic sie niewyswietla i nietworzy sie zaden plik O CO CHODZI (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
tiraeth
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


A może napiszesz co dokładnie nie działa?
Go to the top of the page
+Quote Post
pys1986
post
Post #11





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 18.01.2005

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


po prostu nic sie niewyswitla ani nie tworzy mi zadnego pliku, wywoluje funkcje w ten sposob i nic

  1. <?php
  2. resizeImage('1.jpg', 100, 100, '2.jpg', 5); 
  3. ?>


Oczywiscie wczesniej pisze cala funkcje (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !

Ten post edytował pys1986 2.03.2005, 20:21:57
Go to the top of the page
+Quote Post
miedzna
post
Post #12





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


mi wywala :

Fatal error: Call to undefined function: exif_imagetype()

co robić?
Go to the top of the page
+Quote Post
kicaj
post
Post #13





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Cytat(miedzna @ 2005-03-04 13:39:22)
Fatal error: Call to undefined function: exif_imagetype()

--enable--exif
Go to the top of the page
+Quote Post
tiraeth
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


NOWY KOD KTÓRY NIE WYMAGA EXIF:

  1. <?php
  2. function imgType($name)
  3. {
  4.  if(substr($name, -4, 4) == '.jpg' || substr($name, -4, 4) == 'jpeg')
  5.  {
  6. return &#092;"IMAGETYPE_JPEG\";
  7.  }
  8.  elseif(substr($name, -4, 4) == '.gif')
  9.  {
  10. return &#092;"IMAGETYPE_GIF\";
  11.  }
  12.  elseif(substr($name, -4, 4) == '.png')
  13.  {
  14. return &#092;"IMAGETYPE_PNG\";
  15.  }
  16. }
  17.  
  18. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  19. {
  20.  /*
  21. * source - obrazek jpeg
  22. * max_x - maksymalna szerokosc pomniejszonego obrazka
  23. * max_y - maksymalna dlugosc pomniejszonego obrazka
  24. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  25. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  26. */
  27.  
  28. if(imgType($source) == &#092;"IMAGETYPE_JPEG\")
  29. {
  30.  $img_src = imagecreatefromjpeg($source);
  31. }
  32. elseif(imgType($source) == &#092;"IMAGETYPE_GIF\")
  33. {
  34.  $img_src = imagecreatefromgif($source);
  35. }
  36. elseif(imgType($source) == &#092;"IMAGETYPE_PNG\")
  37. {
  38.  $img_src = imagecreatefrompng($source);
  39. }
  40. else
  41. {
  42.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  43. }
  44.  
  45.  $image_x = imagesx($img_src);
  46.  $image_y = imagesy($img_src);
  47.  if($image_x > $image_y) // Landscape
  48.  {
  49. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  50. $ratio_y = $ratio_x;
  51. $move = 'y';
  52.  }
  53.  else // Portrait
  54.  {
  55. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  56. $ratio_x = $ratio_y;
  57. $move = 'x';
  58.  }
  59. $new_x = $image_x*$ratio_x;
  60. $new_y = $image_y*$ratio_y;
  61.  
  62. $move_x = ($move == &#092;"x\") ? ($max_x-$new_x)/2 : 0;
  63. $move_y = ($move == &#092;"y\") ? ($max_y-$new_y)/2 : 0;
  64.  
  65. $new_img = imagecreatetruecolor($max_x, $max_y);
  66. $background = imagecolorallocate($new_img, 255, 255, 255);
  67. imagefill($new_img, 0, 0, $background);
  68. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  69.  
  70. if(imgType($save_image) == &#092;"IMAGETYPE_JPEG\")
  71. {
  72.  imagejpeg($new_img, $save_image, 100);
  73. }
  74. elseif(imgType($save_image) == &#092;"IMAGETYPE_GIF\")
  75. {
  76.  imagegif($new_img, $save_image);
  77. }
  78. elseif(imgType($save_image) == &#092;"IMAGETYPE_PNG\")
  79. {
  80.  imagepng($new_img, $save_image);
  81. }
  82.  
  83.  echo '<img src=\"'.$save_image.'\" border=\"1\">';
  84. }
  85. ?>
Go to the top of the page
+Quote Post
darkspirit
post
Post #15





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 13.08.2004
Skąd: Łódź

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


no tak ale teraz w sumie można łatwo złapać błąd jak obrazek ma nazwę hello.jpg, a jest typu *.gif, nie można by naprzykład zastosować: getimagesize()?

paps
Go to the top of the page
+Quote Post
webtg
post
Post #16





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 28.12.2004
Skąd: Tarnowskie Góry

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


Skrypcik fajny, ale przy wielkich rozdzielczościach nie działa (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif)
W czym może być problem ?
Go to the top of the page
+Quote Post
maker
post
Post #17





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 17.09.2004

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


max_execution_time lub memory_limit

potrzebna pamiec jak dobrze pamietam oblicza sie wzorem

((szerokosc x wysokosc x 3)/1024)/1024 (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

Ten post edytował maker 8.04.2005, 20:00:49
Go to the top of the page
+Quote Post
webtg
post
Post #18





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 28.12.2004
Skąd: Tarnowskie Góry

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


To mam gdzies zadeklarować w skrypcie czy zmienić w php.ini ?
Go to the top of the page
+Quote Post
Bakus
post
Post #19


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

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


Wszystko jest napisane tu:

max_execution_time - http://php.idn.net.pl/ini-set

memory_limit - http://php.idn.net.pl/set-time-limit
Go to the top of the page
+Quote Post
webtg
post
Post #20





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 28.12.2004
Skąd: Tarnowskie Góry

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


Dzięki dzięki,

poprostu nie mam wglądu w php.ini, ale admin wszystko pozmieniał i jest OK

Ale taki temat może się komuś przydać, o ile skorzysta z wyszukiwarki
Go to the top of the page
+Quote Post
xberus
post
Post #21





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.08.2003

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


  1. <?php
  2.  imagejpeg($new_img, $save_image, 100);
  3. ?>


Ta linijka nie powinna wygladac tak?

  1. <?php
  2. imagejpeg($new_img, $save_image, $jpeg_quality);
  3. ?>
Go to the top of the page
+Quote Post
tiraeth
post
Post #22





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Faktycznie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) małe przeoczenie...
Go to the top of the page
+Quote Post
PanGuzol
post
Post #23





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Oco chodzi z
--enable--exif
bo niewiem kaj to dać?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #24





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Należy skompilować php z obsługą funkcji exif_
Go to the top of the page
+Quote Post
PanGuzol
post
Post #25





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Można jaśniej bo dalej niekapuje?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Może poczytaj php.net o rekompilacji/kompilacji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Sam się na tym nie znam (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat(php.net (english))
Windows users must enable both the php_mbstring.dll  and php_exif.dll DLL's in php.ini. The php_mbstring.dll DLL must be loaded before the php_exif.dll DLL so adjust your php.ini accordingly.

Cytat(php.net (tłumaczenie))
Użytkownicy Windows muszą włączyć obsługę bibliotek php_mbstring.dll i php_exif.dll w php.ini. Plik php_mbstring.dll musi zostać załadowany przed php_exif.dll, więc odpowiednio zedytuj swój plik konfiguracyjny.


Kod
[-- OTWÓRZ: php.ini --]

[-- ZNAJDŹ --]
;extension=php_exif.dll

[-- ZAMIEŃ NA --]
extension=php_mbstring.dll

[-- ZNAJDŹ --]
;extension=php_mbstring.dll

[-- ZAMIEŃ NA --]
extension=php_exif.dll

[-- ZAPISZ I ZAMKNIJ PLIK --]
Go to the top of the page
+Quote Post
bumfank
post
Post #27





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

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


a powiedzcie mi jak zrobic inteligentny resize, czyli np mam ustawiona tylko wartosc zeby szerokosc miala 150px i on wtedy inteligetnie dlugosc ustali wedlug oryginalnego obrazka np obrazek to plakat gdzie dlugosc wieksza jak szerokosc to wtedy np bedzie szerokosc 150 i on sam sobie ustawi ze dlugosc to 300pxow i odwrotnie lezace obrazki zeby mialy szer 150 a dlugosc np 100pxow.

odrazu powiem ze uzylem drugiej wersji skryptu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował bumfank 8.08.2005, 01:31:46
Go to the top of the page
+Quote Post
Bojakki
post
Post #28





Grupa: Zarejestrowani
Postów: 379
Pomógł: 0
Dołączył: 18.08.2004

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


Cytat(bumfank @ 2005-08-08 00:27:46)
a powiedzcie mi jak zrobic inteligentny resize, czyli np mam ustawiona tylko wartosc zeby szerokosc miala 150px i on wtedy inteligetnie dlugosc ustali wedlug oryginalnego obrazka np obrazek to plakat gdzie dlugosc wieksza jak szerokosc to wtedy np bedzie szerokosc 150 i on sam sobie ustawi ze dlugosc to 300pxow i odwrotnie lezace obrazki zeby mialy szer 150 a dlugosc np 100pxow.

odrazu powiem ze uzylem drugiej wersji skryptu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Sorka, ze odkopuje temat - dinozaur, ale mam dokladnie taka sama prosbe jak piszaca nade mna osoba. Moze ktos pomoc?
Go to the top of the page
+Quote Post
NuLL
post
Post #29





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

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


Skorzystajcie z wyszukiwarki - sam wkleiłem taką funkcję.
Go to the top of the page
+Quote Post
Herf-Life
post
Post #30





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.07.2005
Skąd: Ełk

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


dobry skrypt ... ale
w $jpeg_quality najlepiej zastosować jakość 94 (nie więcej)
z doświadczenia wam to napisałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Droopy
post
Post #31





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 17.01.2004
Skąd: Suchedniów k/Kielc

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


tiraeth - świetna funkcja, wielkie dzięki, jednak mam kilka uwag (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
po pierwsze jeśli nazwa pliku jest napisana dużymi literami (wraz z rozszerzeniem) to wtedy funkcja nie rozpoznaje typu pliku (i się wywala), po drugie $jpeg_quality naprawde 90 wystarczy, a używanie 100 prowadzi to powstawania plików sporo większych, a po trzecie dlacego stworzony obrazek ma te białe marginesy (znaczy jak dam do zmniejszenie odrazek bardzo wysoki a wąski to pojawią się białe marginesy po bokach)

trochę zmieniłem skrypt, tak jak napisałem powyżej i mam nadzieję, że nie obrazisz się jak wkleję tu twój skrypt z moimi modyfikacjami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. function imgType($name)
  3. {
  4. $roz = strtolower(substr($name,-4));
  5.  if($roz == '.jpg' || $roz == 'jpeg' || $roz == '.jpe')
  6.  {
  7. return "IMAGETYPE_JPEG";
  8.  }
  9.  elseif($roz == '.gif')
  10.  {
  11. return "IMAGETYPE_GIF";
  12.  }
  13.  elseif($roz == '.png')
  14.  {
  15. return "IMAGETYPE_PNG";
  16.  }
  17. }
  18.  
  19. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 90)
  20. {
  21.  /*
  22. * source - obrazek jpeg
  23. * max_x - maksymalna szerokosc pomniejszonego obrazka
  24. * max_y - maksymalna dlugosc pomniejszonego obrazka
  25. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  26. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  27. */
  28.  
  29. if (imgType($source) == "IMAGETYPE_JPEG"){
  30. $img_src = imagecreatefromjpeg($source);
  31. } else if (imgType($source) == "IMAGETYPE_GIF"){
  32. $img_src = imagecreatefromgif($source);
  33. } else if (imgType($source) == "IMAGETYPE_PNG"){
  34. $img_src = imagecreatefrompng($source);
  35. } else {
  36. die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  37. }
  38.  
  39. $image_x = imagesx($img_src);
  40. $image_y = imagesy($img_src);
  41. if($image_x > $image_y) { // Landscape
  42. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  43. $ratio_y = $ratio_x;
  44. $move = 'y';
  45. } else { // Portrait
  46. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  47. $ratio_x = $ratio_y;
  48. $move = 'x';
  49. }
  50. $new_x = $image_x*$ratio_x;
  51. $new_y = $image_y*$ratio_y;
  52.  
  53. $new_img = imagecreatetruecolor($new_x, $new_y);
  54. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y);
  55.  
  56. if(imgType($save_image) == "IMAGETYPE_JPEG") {
  57. imagejpeg($new_img, $save_image, $jpeg_quality);
  58. } else if (imgType($save_image) == "IMAGETYPE_GIF") {
  59. imagegif($new_img, $save_image);
  60. } else if (imgType($save_image) == "IMAGETYPE_PNG") {
  61. imagepng($new_img, $save_image);
  62. }
  63.  
  64. echo '<img src="'.$save_image.'" border="1">';
  65. }
  66. ?>


Ten post edytował Droopy 21.09.2005, 20:23:05
Go to the top of the page
+Quote Post
Homiczek
post
Post #32





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.04.2003

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


Sorka że odgrzewam temat, ale mam problem związany z generacją miniaturki.
Skrypt taki już jakiś czas temu sobie zrobiłem, ale odkryłem jedną ciekawą rzecz.

Wcześniej też się zdarzało, że na stronie znajdowałem miniaturki wypełnione całe na czarno.
Ale teraz podczas prac nad nową wersją strony, do uploadu postanowiłem wrzucić zdjęcia z komórki (nokia 3220), noi pięknie mi wrzuciło wszystkie miniaturki czarne, a przy okazji troche błędów.

Odpaliłem nawet powyższy skrypt noi to samo - a nawet gorzej, bo on już nic nie wygenerował (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A sypie takimi błędami :
Kod
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'zdjecie.jpg' is not a valid JPEG file in c:\usr\krasnal\www\newstr\zdj_test.php on line 30

Warning: imagesx(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\newstr\zdj_test.php on line 39

Warning: imagesy(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\newstr\zdj_test.php on line 40


Czyli jakiś niezgodny format jpga - chociaż windoza go normalnie wyświetla i wsio jest ok. A to niby zostało coś sprawdzone podczas uploadu - czy plik jest typu pjeg lub jpeg(to w moim kodzie)

Jak ktoś ma jakieś pomysły czemu jpgi z koma nie są ok dla tej grupy funkcji, lub jak temu zaradzić to z góry dzienki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #33





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Prawdopodobie format zapisu tych zdjęć, pomimo że zbliżony do .jpg nie do końca nim jest. Może coś nie tak z typem mime. Założe się że jak je otworzysz w jakimś programie graficznym i zapiszesz ponownie jako .jpg to będzie działało.
Go to the top of the page
+Quote Post
Fallout
post
Post #34





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Witam,

po mękach z włączeniem GD2 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) udało mi się uruchomić ten skrypt, naprawdę dobra robota.. ale jedna rzecz jest mi w nim potrzebna (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) tzn:

teraz plik jest nadpisywany, a chciałbym aby zapisywał się w tym samym katalogu co plik źródłowy + katalog mini. czyli

plik : /obrazki/1.jpg
mini : /obrazki/mini/1.jpg

czy byłby ktoś chętny wprowadzić taką modyfikacje?

edit:

no i ewentualnie aby sprawdzal czy plik mini istnieje to wtedy skrypt niepotrzebnie by sie nie wykonywal.. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam

Ten post edytował Fallout 30.09.2005, 12:11:04
Go to the top of the page
+Quote Post
Bakus
post
Post #35


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

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


  1. <?php
  2. define(MAX_WYMIAR_X, 128);
  3. define(MAX_WYMIAR_Y, 128);
  4. $dir = './obrazki/';
  5. $dir_mini = './obrazki/mini/';
  6.  
  7. if ($dh = opendir($dir))
  8. {
  9. while (($file = readdir($dh)) !== false)
  10. {
  11. if(substr($file, -3) == 'jpg' && !file_exists($dir_mini . $file))
  12. {
  13. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  14. }
  15. }
  16. closedir($dh);
  17. }
  18. ?>
Go to the top of the page
+Quote Post
Fallout
post
Post #36





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


dzięki Bakus! Nawet nie przypuszczałem, że to takie balane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

No i nigdy nie może być za pięknie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Cytat
./galerie/spacery/.
./galerie/spacery/mini/.
./galerie/spacery/..
./galerie/spacery/mini/..
./galerie/spacery/mini
./galerie/spacery/mini/mini
./galerie/spacery/1.JPG
./galerie/spacery/mini/1.JPG
./galerie/spacery/10.jpg
./galerie/spacery/mini/10.jpg
./galerie/spacery/12.JPG
./galerie/spacery/mini/12.JPG
./galerie/spacery/13.JPG
./galerie/spacery/mini/13.JPG


oczywiscie chodzi o pierwsze 6 wpisów.. jak się ich pozbyć?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

moje kody:


Ten wyswietla galerie, a po kliknieciu w nia, wyswietla minaturki:
  1. <?php
  2. ini_set('display_errors',1);
  3. include 'db_engine.php';
  4. include 'resize.inc.php';
  5.  
  6. define(MAX_WYMIAR_X, 100);
  7. define(MAX_WYMIAR_Y, 75);
  8.  
  9. $db = new dbengine();
  10. $db->polacz();
  11.  
  12. if (isset($_GET['id'])) // pokazuje wybrana
  13. {
  14. $gid = $_GET['id'];
  15. // pobranie katalogu fotek
  16. $db->DoSql("SELECT katalog FROM galerie WHERE id_galerii = $gid");
  17. $kat = mysql_result($db->wynik,0,0);
  18. $dir = './galerie/'.$kat.'/';
  19. $dir_mini = './galerie/'.$kat.'/mini/';
  20. if ($dh = opendir($dir))
  21. {
  22. while (($file = readdir($dh)) !== false)
  23. {
  24. echo $dir. $file. '<br>';
  25. echo $dir_mini. $file. '<br>';
  26. /*
  27. if(((substr($file, -3,3) == 'jpg') or (substr($file, -3,3) == 'JPG'))
  28.  && !file_exists($dir_mini . $file))
  29. {
  30. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  31. }
  32. elseif(file_exists($dir_mini . $file))
  33. {
  34. echo '<img src="'.$dir_mini . $file.'" border="1">';
  35. }*/
  36. }
  37. closedir($dh);
  38. } 
  39.  
  40. $db->rozlacz();
  41. }
  42. else // pokazuje wszystkie
  43. {
  44.  
  45. $db->DoSQL("SELECT * FROM galerie");
  46. $db->NRows;
  47. $w = $db->wynik;
  48. $n = $db->rows;
  49.  
  50. while ($r=mysql_fetch_array($w))
  51. {
  52. $id  = $r['id_galerii'];
  53. $opis = $r['nazwa_galerii'];
  54.  
  55. echo "<a href="index.php?s=galerie&amp;id=$id">".$opis.'</a><br>';
  56. }
  57.  
  58. $db->rozlacz();
  59.  
  60. } // koniec wszystkich
  61. ?>


Ten kod to natomiast ciut zmodyfikowany skrypt z tematu (wiec nie wklejam calego):

  1. <?php
  2. function imgType($name)
  3. {
  4.  if((substr($name, -4, 4) == '.JPG')OR(substr($name, -4, 4) == '.jpg'))
  5.  {
  6. return "IMAGETYPE_JPEG";
  7.  }
  8.  elseif(substr($name, -4, 4) == '.gif')
  9.  {
  10. return "IMAGETYPE_GIF";
  11.  }
  12.  elseif(substr($name, -4, 4) == '.png')
  13.  {
  14. return "IMAGETYPE_PNG";
  15.  }
  16. }
  17. ?>


jak widac zmienilem tylko warunek..


Wiec powtorze pytanie? jak pozbyc sie tych zbędnych wpisów?

Dziękuje z góry i pozdrawiam
Marcin
Go to the top of the page
+Quote Post
Bakus
post
Post #37


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

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


  1. <?php
  2. if(((substr($file, -3,3) == 'jpg') or (substr($file, -3,3) == 'JPG'))
  3. ?>

to właśnie powyższa linijka odpowiada za wybieranie tylko plikow .jpg
mozesz zrobic tak:
  1. <?php
  2. $typy = array("jpg", "png", "gif");
  3. if(in_array(substr(strtolower($file), -3,3), $typy))
  4. {
  5. if(file_exists($dir_mini . $file))
  6. {
  7. print '<img src="'.$dir_mini . $file.'" border="1">';
  8. }else{
  9. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  10. }
  11. }
  12. ?>
Go to the top of the page
+Quote Post
Fallout
post
Post #38





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Dzięki ponownie Bakus !


Skrypt uruchomiony, działą znakomicie (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)


Tylko tak zastanawiam się, czy jest sposób na "następny" i "poprzedni" ? W końcu to pliki, mogące mieć różne nazwy, może być ich rożna ilość.. jest możliwe wogóle to do wykonania?


pozdrawiam
Go to the top of the page
+Quote Post
Markym
post
Post #39





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 1.04.2006

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


Witam podepnę się pod topic. Interesuje mnie autogenerowanie miniatur zdjęć, skrypt poniżej niestety nie działa.

  1.  
  2. <?php
  3.  
  4.  
  5. define('DIR' , 'auto'); //gdzie są zdjęcia
  6. define('SUBDIR', 'auto/mini'); //podkatalog na miniatury
  7. define('PREFIX', 'm');
  8. define('WIDTH', 160);
  9. define('HEIGHT', 120);
  10.  
  11. $i = 0;
  12. mkdir(DIR . SUBDIR);
  13. chmod(DIR . SUBDIR, 0755);
  14.  
  15. if ($handle = opendir(DIR)) {
  16. while (false !== ($file = readdir($handle))) {
  17. if ($file != '.' && $file != '..' &&
  18. $file != basename(__FILE__) && $file != SUBDIR) {
  19. $i++;
  20. $src_img = imagecreatefromjpeg(DIR . $file);
  21. $dst_img = imagecreatetruecolor(WIDTH, HEIGHT);
  22. imagecopyresized($dst_img, $src_img, 0, 0, 0, 0,
  23. WIDTH, HEIGHT, imagesx($src_img),
  24. imagesy($src_img));
  25. $mini = PREFIX . $file;
  26. echo $i . '. Miniatura z pliku ' . $file . '...';
  27. echo imagejpeg($dst_img, DIR.SUBDIR.'/'.$mini,
  28. 100) && src_img ? 'OK' : 'FALSE';
  29. chmod(DIR.SUBDIR.'/'. $mini, 0755);
  30. echo "\n";
  31. }
  32. }
  33. }
  34.  
  35. ?>


Byłbym również wdzięczny za wskazanie jakiegoś funkcjonalnego skryptu do generowania miniatur w trakcie wysyłania na serwer. Ten powyżej miałby mnie trochę wyręczyć bo do zmodyfikowania jest sporo fotek.
Go to the top of the page
+Quote Post
intol
post
Post #40





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


Jak wynika z moich testów w funkcji jest błąd, dotyczący obliczania ratio.

O ile dla obrazka o rozmiarach 100x100 wywołanie funkcji:

resizeImage($img,20, 100, $imgMini);

zadziała prawidłowo, to:

resizeImage($img,100, 20, $imgMini);

już tak nie zadziała.

P.S. (do autora)
Czy mógłbyś w główym poście umieścić ostateczną wersję skryptu? W wątku co rusz przedstawiane są jakieś udoskonalenia, i zaorientowanie się we wszystkich jest bardzo czasochłonne.
Go to the top of the page
+Quote Post
JOHNY
post
Post #41





Grupa: Zarejestrowani
Postów: 297
Pomógł: 0
Dołączył: 17.01.2003
Skąd: Tarnów

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


Witam wszystkich sorka że tak wtrące ale czy nie lepiej by było tworzyć miniaturke w tym samym katalogu z dopiskiem:
ex.
katalog/test.jpg
katalog/test_m.jpg
Go to the top of the page
+Quote Post
tiraeth
post
Post #42





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


A od czego jest parametr $save_image ? Przecież podajesz tam nazwę pliku, do którego ma zostać zapisana miniaturka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Niedługo może poprawię tą funkcję, narazie brak czasu (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
MalyKazio
post
Post #43





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Witam,

Mam problem z tym skryptem. Jest to skrypt z pierwszego postu zmodyfikowany poprzez dodanie osobnego katalogu na miniaturki. I wlasnie w tym problem. Jesli katalog $dir i $dir_mini są jednakowe i wskazuja na docelowe miejsce uploadu duzego pliku to miniatura jest tworzona. Problem tylko w tym, ze jest tworzona w miejsce duzego pliku. Calosc wyglada tak:

  1. <?php
  2. $dir = './obrazki/';
  3.  $dir_mini = './mini/';
  4. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  5. {
  6.  
  7.  /*
  8. * source - obrazek jpeg
  9. * max_x - maksymalna szerokosc pomniejszonego obrazka
  10. * max_y - maksymalna dlugosc pomniejszonego obrazka
  11. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  12. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  13. */
  14.  
  15. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  16. {
  17.  $img_src = imagecreatefromjpeg($source);
  18. }
  19. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  20. {
  21.  $img_src = imagecreatefromgif($source);
  22. }
  23. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  24. {
  25.  $img_src = imagecreatefrompng($source);
  26. }
  27. else
  28. {
  29.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  30. }
  31.  
  32.  $image_x = imagesx($img_src);
  33.  $image_y = imagesy($img_src);
  34.  if($image_x > $image_y) // Landscape
  35.  {
  36. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  37. $ratio_y = $ratio_x;
  38. $move = 'y';
  39.  }
  40.  else // Portrait
  41.  {
  42. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  43. $ratio_x = $ratio_y;
  44. $move = 'x';
  45.  }
  46. $new_x = $image_x*$ratio_x;
  47. $new_y = $image_y*$ratio_y;
  48.  
  49. $move_x = ($move == "x") ? ($max_x-$new_x)/: 0;
  50. $move_y = ($move == "y") ? ($max_y-$new_y)/: 0;
  51.  
  52. $new_img = imagecreatetruecolor($max_x, $max_y);
  53. $background = imagecolorallocate($new_img, 255, 255, 255);
  54. imagefill($new_img, 0, 0, $background);
  55. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  56.  
  57. if(exif_imagetype($save_image) == IMAGETYPE_JPEG)
  58. {
  59.  imagejpeg($new_img, $save_image, $jpeg_quality);
  60. }
  61. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  62. {
  63.  imagegif($new_img, $save_image);
  64. }
  65. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  66. {
  67.  imagepng($new_img, $save_image);
  68. }
  69.  
  70.  echo '<img src="'.$save_image.'" border="1">';
  71. }
  72.  
  73.  
  74. list($width, $height) = getimagesize($_FILES['img']['tmp_name']);
  75.  
  76. // sprawdzamy czy podany plik zostal odebrany
  77.  if (is_uploaded_file($_FILES['img']['tmp_name'])) {
  78. $nazwa_pliku=$_FILES['img']['name'];
  79.  
  80. // wyciagamy rozszrzenie skopiowanego pliku
  81. $rozsz=explode(".",$nazwa_pliku);
  82.  
  83.  
  84. if($rozsz[1]=="gif" || $rozsz[1]=="jpg" || $rozsz[1]=="jpeg" || $rozsz[1]=="png" || $rozsz[1]=="JPG" || $rozsz[1]=="JPEG") {
  85. move_uploaded_file($_FILES['img']['tmp_name'], 'obrazki/' . $_FILES['img']['name']) or die('Error moving image...');
  86. $file=$_FILES['img']['name'];
  87. resizeImage($dir . $file, 100, 100, $dir_mini . $file, 75);
  88.  
  89. echo "$file<BR>";
  90. echo "$dir<BR>";
  91. echo "$dir_mini<BR>";
  92.  
  93. } else {
  94. echo "Niewlasciwy format pliku!";
  95. }
  96. }
  97. ?>


Nie wiem co moglem zrobic zle bo juz kombinowalem na wszystkie sposoby i zmienialem chyba prawie wszystko. Wykonanie powyzszego kodu wyswietla:

  1. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 57
  2.  
  3. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 61
  4.  
  5. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 65


Ok, juz sobie poradzilem. Dziala drugi kod, ten bez exif

Ten post edytował MalyKazio 5.06.2006, 11:58:41
Go to the top of the page
+Quote Post
amator01
post
Post #44





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.01.2006

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


przy tym skrypcie do miniatur ( 2 wersji bez exif )
mam "problem" polegajacy na mojej niewiedzy, otorz :
  1. Fatal error: Call to undefined function: imagecreatefromjpeg() in D:\USR\www\test\miniaturki.php on line 30

zapewne musze zainstalowac jakas biblioteke czy cos co ?
ktos moze mi powiedziec co ?
mam na kompie Apacha 2.0.55 + php 4.4.2
Go to the top of the page
+Quote Post
tiraeth
post
Post #45





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Nie masz biblioteki GD2+ (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #46





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


resize.phps na tiraeth.info

Przykład użycia:
  1. <?php
  2. makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' );
  3. ?>

Otworzy obrazek jpg, zeskaluje do max. 117 na 117 i wyświetli jako gif.
Go to the top of the page
+Quote Post
cichy19-
post
Post #47





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 5.06.2006

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


Witam,

Znalazł ktoś sposób na miniaturki zdjęć z telefonu komórkowego?

Zawsze sypią się błędy.
Go to the top of the page
+Quote Post
pb17
post
Post #48





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 21.02.2006

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


Cytat(tiraeth @ 29.08.2006, 16:16:55 ) *
resize.phps na tiraeth.info

Przykład użycia:
  1. <?php
  2. makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' );
  3. ?>

Otworzy obrazek jpg, zeskaluje do max. 117 na 117 i wyświetli jako gif.


zapisałem ten kod do pliku miniatura.php

  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>
  4. <?php
  5. /***
  6.  * Author : Marcin (tiraeth) Chwedziak
  7.  * Contact : me[at]tiraeth.info
  8.  * Website : <a href="http://tiraeth.info/blog/" target="_blank">http://tiraeth.info/blog/</a>
  9.  * Created : 08/23/2006 4:41 pm
  10.  * 
  11.  * 
  12.  * mixed makeThumbnail ()
  13.  * ---
  14.  * imageHandle - name of file to create thumbnail
  15.  * destWidth - destination image width
  16.  * destHeight - destination image height
  17.  * scaleType - scale, fit or resize
  18.  * displayImage - true, if you want to display image or filename if you want to save image
  19.  * jpegQuality - quality of jpeg image if you are creating jpeg file
  20.  * returnType - destination image type (gif,jpeg,png,wbmp or default if you want to use source file type)
  21.  */
  22. function makeThumbnail ( $imageHandle, $destWidth, $destHeight, $scaleType = 'scale', $displayImage = true, $jpegQuality = 92, $returnType = 'default' )
  23. {
  24. if ( $displayImage === true ) {}
  25. else { $savePath = $displayImage; $displayImage = false; }
  26.  
  27. if ( file_exists($imageHandle) )
  28. {
  29. $imgType = getimagesize($imageHandle);
  30. $imgType = $imgType[2];
  31. switch ( $imgType )
  32. {
  33. case 1 : $imgType = 'gif'; break;
  34. case 2 : $imgType = 'jpeg'; break;
  35. case 3 : $imgType = 'png'; break;
  36. case 6 : $imgType = 'bmp'; break;
  37. default : $imgType = 'illegal';
  38. }
  39.  
  40. if ( $imgType == 'illegal' )
  41. {
  42. if ( $displayImage )
  43. {
  44. echo 'Error: Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.';
  45. }
  46. else
  47. {
  48. return array('error_message' => 'Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.');
  49. }
  50. }
  51.  
  52. $imgSrc = false;
  53.  
  54. switch ( $imgType )
  55. {
  56. case 'gif' :
  57. $imgSrc = @imagecreatefromgif($imageHandle);
  58. break;
  59. case 'jpeg' :
  60. $imgSrc = @imagecreatefromjpeg($imageHandle);
  61. break;
  62. case 'png' :
  63. $imgSrc = @imagecreatefrompng($imageHandle);
  64. break;
  65. case 'bmp' :
  66. $imgSrc = @imagecreatefromwbmp($imageHandle);
  67. break;
  68. }
  69.  
  70. if ( $imgSrc == '' )
  71. {
  72. if ( $displayImage )
  73. {
  74. echo 'Error: Could not create image handle.';
  75. }
  76. else
  77. {
  78. return array('error_message' => 'Could not create image handle.');
  79. }
  80. }
  81. }
  82. else
  83. {
  84. if ( $displayImage )
  85. {
  86. echo 'Error: File doesn't exists.';
  87. }
  88. else
  89. {
  90. return array('error_message' => 'File doesn't exists.');
  91. }
  92. }
  93.  
  94. $imageWidth = imagesx($imgSrc);
  95. $imageHeight = imagesy($imgSrc);
  96.  
  97. if ( $scaleType == 'scale' )
  98. {
  99. // Scale
  100. if ( $imageWidth > $imageHeight )
  101. {
  102. // Landscape
  103. $newWidth = $destWidth;
  104. $newHeight = ceil ( $imageHeight * $newWidth / $imageWidth );
  105. }
  106. elseif ( $imageWidth < $imageHeight )
  107. {
  108. $newHeight = $destHeight;
  109. $newWidth = ceil ( $imageWidth * $newHeight / $imageHeight );
  110. }
  111. else
  112. {
  113. $newWidth = $destWidth;
  114. $newHeight = $destHeight;
  115. }
  116. $movex = 0;
  117. $movey = 0;
  118.  
  119. $createWidth = $newWidth;
  120. $createHeight = $newHeight;
  121. }
  122. elseif ( $scaleType == 'fit' )
  123. {
  124. // Fit
  125. if ( $imageWidth > $imageHeight )
  126. {
  127. $newHeight = $destHeight;
  128. $newWidth = ceil ( $imageWidth * $newHeight / $imageHeight );
  129.  
  130. $movex = ceil ( ($newWidth - $destWidth)/)*-1;
  131. $movey = 0;
  132. }
  133. elseif ( $imageWidth < $imageHeight )
  134. {
  135. $newWidth = $destWidth;
  136. $newHeight = ceil ( $imageHeight * $newWidth / $imageWidth );
  137.  
  138. $movex = 0;
  139. $movey = ceil ( ($newHeight - $destHeight)/)*-1;
  140. }
  141. else
  142. {
  143. $newWidth = $destWidth;
  144. $newHeight = $destHeight;
  145.  
  146. $movex = 0;
  147. $movey = 0;
  148. }
  149.  
  150. $createWidth = $destWidth;
  151. $createHeight = $destHeight;
  152. }
  153. else
  154. {
  155. // Resize
  156. $newWidth = $destWidth;
  157. $newHeight = $destHeight;
  158. $movex = 0;
  159. $movey = 0;
  160.  
  161. $createWidth = $newWidth;
  162. $createHeight = $newHeight;
  163. }
  164.  
  165. $imgDest = imagecreatetruecolor ( $createWidth, $createHeight );
  166.  
  167. imagecopyresampled ( $imgDest, $imgSrc, $movex, $movey, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
  168.  
  169. if ( $displayImage )
  170. {
  171. header("Content-type: image/" . $imgType);
  172. }
  173.  
  174. if ( $returnType == 'default' )
  175. {
  176. switch ( $imgType )
  177. {
  178. case 'gif' :
  179. if ( $displayImage ) { imagegif($imgDest); }
  180. else { imagegif($imgDest, $savePath); }
  181. break;
  182. case 'jpeg' :
  183. if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); }
  184. else { imagegif($imgDest, $savePath); }
  185. break;
  186. case 'png' :
  187. if ( $displayImage ) { imagepng($imgDest); }
  188. else { imagepng($imgDest, $savePath); }
  189. break;
  190. case 'bmp' :
  191. if ( $displayImage ) { imagewbmp($imgDest); }
  192. else { imagewbmp($imgDest, $savePath); }
  193. break;
  194. }
  195. }
  196. else
  197. {
  198. switch ( $returnType )
  199. {
  200. case 'gif' :
  201. if ( $displayImage ) { imagegif($imgDest); }
  202. else { imagegif($imgDest, $savePath); }
  203. break;
  204. case 'jpeg' :
  205. if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); }
  206. else { imagegif($imgDest, $savePath); }
  207. break;
  208. case 'png' :
  209. if ( $displayImage ) { imagepng($imgDest); }
  210. else { imagepng($imgDest, $savePath); }
  211. break;
  212. case 'bmp' :
  213. if ( $displayImage ) { imagewbmp($imgDest); }
  214. else { imagewbmp($imgDest, $savePath); }
  215. break;
  216. }
  217. }
  218.  
  219. if ( $displayImage == false )
  220. {
  221. return array(
  222. 'filename' => $imageHandle,
  223. 'save_path' => $savePath,
  224. 'image_width' => $imageWidth,
  225. 'image_height' => $imageHeight,
  226. 'return_width' => $newWidth,
  227. 'return_height' => $newHeight,
  228. 'image_type' => $imgType,
  229. 'return_type' => ( $returnType == 'default' ) ? $imgType : $returnType,
  230. 'jpeg_quality' => ( $returnType == 'jpeg' || ( $returnType == 'default' && $imgType == 'jpeg' ) ) ? $jpegQuality : false,
  231. );
  232. }
  233. }
  234.  
  235. makeThumbnail ( '1.jpg', 100, 100, 'scale', true, 100, 'jpg' );
  236. ?>

Mam plik a.jpg w tym samym katalogu co powyższy skrypt, gdy go wywołuje, ani się nie tworzy miniaturka, ani mi jej nie wyświetla ;f raportowanie błędów jak widać włączone i nic mi się nie wyświetla ;/
Go to the top of the page
+Quote Post
Zimon
post
Post #49





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 7.08.2006

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


a jak przerobić ten skrypt aby jeśli mamy zdjęcie wieksze niż 1024x768 to skalował je do tych wymiarów i tworzył później miniaturkę i dodawał wpis do bazy danych z linkiem do małego i dużego zdjęcia??

pomoże mi ktoś czy nie
Go to the top of the page
+Quote Post
skowron-line
post
Post #50





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


getimagesize
sprawdzasz jakie ma rozmiary i jak sa za duze to zmniejszasz i dodajesz do bazy a jak nie sa to tylko dodajesz
Go to the top of the page
+Quote Post
jaszu
post
Post #51





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 20.05.2006

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


moze ktos wrzucic ten kod na phpfi.com, bo forum cos psuje kody zrodlowe i mi nie chodza ;/
Go to the top of the page
+Quote Post
smarcz
post
Post #52





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

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


  1. <?
  2. /*
  3. Funkcja która zapisuje przekazywany w formularzu obrazek do odpowiedniego format
    u oraz rozdzielczości.
  4.  
  5. Funkcja posiada 4 (cztery) argumenty,
  6. $roz - rodzielczość w jakiej ma być zapisany nowy obraz
  7. $img - nazwa pola z którego przekazywany jest obrazek
  8. $sciezka - sciezka zapisu obrazka
  9. $nnazwa - nowa nazwa nadana obrazkowi po stronie serwera
  10. */
  11.  
  12. function zap_img_x($roz, $img, $sciezka, $nnazwa){
  13.  
  14. ///echo "Jaka rozdzielczość - $roz<br>";
  15. //echo "Jaka nazwa pliku - $img<br>";
  16. //echo "Jaka ścieżka zapisu - $sciezka<br>";
  17. //echo "Nowa nazwa pliku - $nnazwa<br>";
  18.  
  19. //1.) Określam parametry zdjęcia - typ, zapisuje ściężkę tmp_name do zmiennej - plik
  20. $typ = $_FILES['img']['type'];
  21. $plik = $_FILES['img']['tmp_name'];
  22.  
  23. //echo "PLIK - $plik<br>";
  24.  
  25. //2.) Określam szerokość w pixelach
  26. $x = $roz;
  27.  
  28. //echo "X - $x<br>";
  29. //3.) Nadaję nową nazwę dla zdjęcia
  30.  
  31. $mojaNazwa1 = $nnazwa . '.jpg';
  32.  
  33. //echo "Nazwa - $mojaNazwa1<br>";
  34.  
  35.  
  36.  
  37. //5.) Zapisuje obraz w odpowiednim formacie
  38. //Przetwarzanie obrazka z formatu jpg i jpeg
  39.  
  40. if (ereg("image/jpeg", $typ) or ereg("image/pjpeg", $typ)){
  41.  
  42. $zdj = ImageCreateFromJpeg($plik);
  43. $zdjx = ImageSX($zdj);
  44. $zdjy = ImageSY($zdj);
  45. $y = ceil($zdjy*($x/$zdjx));
  46. $nowezdj = imagecreatetruecolor($x, $y);
  47. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  48. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,120);
  49. imagedestroy($zdj);
  50. //echo "$zdjx, $zdjy, $x, $y, $nowezdj<br> $sciezka . $mojaNazwa1 ok";
  51. }
  52.  
  53. //Przetwarzanie obrazka z formatu gif
  54. elseif(ereg("image/gif", $typ)){
  55.  
  56. $zdj = ImageCreateFromGIF($plik);
  57. $zdjx = ImageSX($zdj);
  58. $zdjy = ImageSY($zdj);
  59.  
  60. $y = ceil($zdjy*($x/$zdjx));
  61. $nowezdj = imagecreatetruecolor($x, $y);
  62. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  63. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100);
  64. imagedestroy($zdj);
  65. //echo "ok";
  66. }
  67.  
  68. //Przetwarzanie obrazka z formatu png
  69. elseif(ereg("image/png", $typ)){
  70.  
  71. $zdj = ImageCreateFromPng($plik);
  72. $zdjx = ImageSX($zdj);
  73. $zdjy = ImageSY($zdj);
  74.  
  75. $y = ceil($zdjy*($x/$zdjx));
  76. $nowezdj = imagecreatetruecolor($x, $y);
  77. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  78. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100);
  79. imagedestroy($zdj);
  80. //echo "ok";
  81. }
  82. else{
  83. echo("Niepoprawny format");
  84. }
  85.  
  86. }
  87.  
  88.  
  89. ?>


Co do memory limit - to działa to tak, żeby nie przerwać skryptu należy wcześniej opracować warunek, który sprawdza szerokość x wysokość obrazka i pomnożyć przez odpowiedni współczynnik. W zależności od rozdzielczości obrazka waha się on od 3 i więcej - najbardziej optymalny z moich testów to 5
Nie należy przekroczyć 3 MB pamięci po stronie serwera

Ten post edytował smarcz 25.07.2007, 12:10:39
Go to the top of the page
+Quote Post
sanchoo
post
Post #53





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

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


a jaj mam problem :/ caly kod przechodzi nie wywala bledu.. a miniaturki nie ma :/
...sprawdzalem "gdzie zapisuje" podaje nawet sciezke z home.. /home/user//sa..... nie wiem co sie dzieje :/
Go to the top of the page
+Quote Post
b_chmura
post
Post #54





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Trochę zmieniłem w/w funkcję. Teraz jeśli podana szerokość lub wysokość jest większa jak ta w oryginalnym obrazku to zostaje ona zmniejszona do tej mniejszej (oryginalnej).

Kod
  1. <?php
  2. function img_typ($name) 
  3. {
  4. $name = strtolower(substr($name, -4, 4));
  5.  
  6. if($name == '.jpg' OR $name == 'jpeg') 
  7. {
  8. return ".jpg";
  9. }
  10. elseif($name == '.gif') 
  11. {
  12. return ".gif";
  13. }
  14. elseif($name == '.png')
  15. {
  16. return ".png";
  17. }
  18. }
  19. /////////////////////////////////////////////////////////////////////////////////////
  20. function mini($in, $max_width, $max_height, $out, $jakosc) 
  21. {
  22.  
  23. $typ = img_typ($in);
  24.  
  25. if ($typ == ".jpg") {$img_src = imagecreatefromjpeg($in);}
  26. elseif($typ == ".gif") {$img_src = imagecreatefromgif($in); }
  27. elseif($typ == ".png") {$img_src = imagecreatefrompng($in); }
  28.  
  29. $x = imagesx($img_src);
  30. $y = imagesy($img_src);
  31.  
  32. if($x > $y) 
  33. {
  34. $xr = ($x > $max_width)$max_width/$x : 1;
  35. $yr = $xr;
  36. }
  37. else 
  38. {
  39. $yr = ($y > $max_height)$max_height/$y : 1;
  40. $xr = $yr;
  41. }
  42.  
  43. $new_x = $x*$xr;
  44. $new_y = $y*$yr;
  45.  
  46. $new_img = imagecreatetruecolOR($new_x, $new_y);
  47. $background = imagecolORallocate($new_img, 255, 255, 255);
  48.  
  49. imagefill($new_img, 0, 0, $background);
  50. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $x, $y);
  51.  
  52. $typ = img_typ($out);
  53.  
  54. if ($typ == ".jpg") {imagejpeg($new_img, $out, $jakosc);}
  55. elseif($typ == ".png") { imagepng($new_img, $out, $jakosc);}
  56. elseif($typ == ".gif") { imagegif($new_img, $out);  }
  57. }
  58. ?>
Go to the top of the page
+Quote Post
in5ane
post
Post #55





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Przepraszam, ale mam pytanie. I który skrypt wykorzystać? Ale też ten do tych duuuużych obrazków. Z góry dziękuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
piotr94
post
Post #56





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


Witam!.
Nie ważne z którego skryptu korzystam, nie działają one przy większych obrazkach.
czy znacie jakies skrypty które poradzą sobie z większymi od 1024*768 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
siemieng
post
Post #57





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


Cytat(piotr94 @ 11.03.2009, 18:41:33 ) *
Witam!.
Nie ważne z którego skryptu korzystam, nie działają one przy większych obrazkach.
czy znacie jakies skrypty które poradzą sobie z większymi od 1024*768 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)


Brak możliwości obróbki obrazków większych niż 1024x768 nie wynika z właściwości skryptu, lecz z ustawień serwera:

1. Edytuj php.ini
2. Znajdź memory_limit (u mnie lokalnie: "memory_limit = 10M ; Maximum amount of memory a script may consume (128MB)")
3. Zwiększ do 50M

I będzie gitara (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
dr revuu
post
Post #58





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 21.01.2010

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


Z góry przepraszam za odkop, ale skrypt (post 1) nadal wydaje się dobry, a mam z nim problem.

Otóż wrzucam go do NetBeans i w tych liniach wskazuje mi na błąd:

$move_x = ($move == \"x\") ? ($max_x-$new_x)/2 : 0;
$move_y = ($move == \"y\") ? ($max_y-$new_y)/2 : 0;


Od znaku # skrypt staje się szary (taki sam kolor mają u mnie komentarze, np. te po //). Po wrzuceniu na serwer klasy z tą funkcją, skrypt się zatrzymuje.

Jakieś sugestie?

Ten post edytował dr revuu 9.07.2011, 20:10:51
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 14.10.2025 - 20:10