Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [GD]Funkcja tworząca ikonki .jpg
Forum PHP.pl > Forum > PHP
Master Miko
Witam, oto skrypt tworzący ikonki (obrazki o mniejszych wymiarach).

Podaje się 2 wartości:

dir - ścieżka do pliku
scale - skala pliku (długość boku małej ikonki)

skrypt inicjuje się przez:

  1. <?php
  2.  
  3. <img src="icon.php?dir=(sciezka)&scale=(skala)" alt="Opis...">
  4.  
  5. ?>


Skrypt działa, bardzo fajnie, ale jak dostosować go do tego, żeby również przetwarzał pliki png i gif?
Skrypt został napisany przeze mnie z pomocą książek i for tongue.gif

PS. chciałbym, aby jeśli jakiś plik nie istnieje, zamist normalnego krzyżyka, pojawiał się przeze mnie ustalony plik obrazkowy
PS2. Każdy może użyć tego pliku
PS3. Jakie zabezpieczenia polecilibyście zastosować?



Plik icon.php:
  1. <?php
  2.  header("Content-type: image/jpg");
  3.  $imgName = $_GET['dir']; // Pobiera plik razem ze ścieżką
  4.  $size = $_GET['scale']; // Jaka skala ma być - $size wyznacza długość boku, a wysokość jest dostosowana.
  5.  
  6. if(!($img = imagecreatefromjpeg($imgName))){
  7. echo("Nie Można otworzyć Pliku - $imgName");
  8. return false;
  9. }
  10.  
  11. $img_w = imagesx($img);
  12. $img_h = imagesy($img);
  13. $ratio = $img_w / $img_h;
  14.  
  15. if($ratio > 1){
  16. $new_img_w = $size;
  17. $new_img_h = ($size / $ratio);
  18. } else {
  19. $new_img_w = ($size * $ratio);
  20. $new_img_h = $size;
  21. }
  22. $tempImg = imagecreatetruecolor($new_img_w, $new_img_h);
  23. imagecopyresampled($tempImg, $img, 0, 0, 0, 0, $new_img_w, $new_img_h, $img_w, $img_h);
  24. $name = substr($imgName, 0, strlen($imgName) - 4);
  25. $name = $name."small.jpg";
  26. imagejpeg($tempImg, $name);
  27. Header('Content-type: image/jpeg');
  28. imagejpeg($tempImg, '', 50);
  29. imagedestroy($tempImg);
  30. ?>


Proszę o pomoc.
Apo
do przetwarzanie obrazków png służy
imagecreatefrompng
imagepng
No i wtedy musisz automatycznie zmieniec to header("Content-type: image/jpg");
na to header("Content-type: image/png");
Najlepiej użyj instrukcji warunkowych.
A co do gifów to biblioteka gd narazie ich nie obsługuje.
crash
Nudziło mi się...
  1. <?php
  2.  
  3. $imgName = $_GET[ 'dir' ];  // Pobiera plik razem ze ścieżką
  4. $size = $_GET[ 'scale' ]; // Jaka skala ma być - $size wyznacza długość boku, a wysokość jest dostosowana.
  5.  
  6. $ext  = pathinfo( $imgName, PATHINFO_EXTENSION );
  7.  
  8. if( !function_exists( $func = 'imagecreatefrom' . ( $ext == 'jpg' ? 'jpeg' : $ext ) ) or !( $img = $func( $imgName ) ) )
  9. {
  10.  die( 'Nie Można otworzyć Pliku - ' . $imgName );
  11. }
  12.  
  13. $imgW = imagesx( $img );
  14. $imgH = imagesy( $img );
  15.  
  16. $ratio = $imgW / $imgH;
  17.  
  18. if( $ratio > 1 )
  19. {
  20.  $newImgW = $size;
  21.  $newImgH = ( $size / $ratio );
  22. }
  23. else
  24. {
  25.  $newImgW = ( $size * $ratio );
  26.  $newImgH = $size;
  27. }
  28.  
  29. $tempImg = imagecreatetruecolor( $newImgW, $newImgH );
  30.  
  31. imagecopyresampled( $tempImg, $img, 0, 0, 0, 0, $newImgW, $newImgH, $imgW, $imgH );
  32.  
  33. $name = basename( $imgName, '.' . $ext );
  34. $name = $name . 'small.jpg';
  35.  
  36. header( 'Content-type: image/jpeg' );
  37.  
  38. imagejpeg( $tempImg, $name );
  39. imagejpeg( $tempImg, '', 50 );
  40.  
  41. imagedestroy( $tempImg );
  42.  
  43. ?>
Master Miko
Cytat(Apo @ 2006-02-14 16:54:58)
do przetwarzanie obrazków png służy

<a href="http://pl.php.net/imagepng">imagepng

No i wtedy musisz automatycznie zmieniec to header("Content-type: image/jpg");
na to header("Content-type: image/png");
Najlepiej użyj instrukcji warunkowych.
A co do gifów to biblioteka gd narazie ich nie obsługuje.

Jak nie obsługuje? U mnie support gifów jest ON - odczyt i zapis


@Cashu
Dziękuję bardzo, ale nie o to mi chodziło (ext napewno się przyda smile.gif )
CO robi ta modyfikacja?

Może zapytam się tak: które funkcje powinienem zamienić na jakie, aby skrypt obsługiwał jpg, png i gif?


czy png i gif też używają funkcji: questionmark.gif

imagecreatetruecolor
imagecopyresampled
crash
Podałem Ci kod funkcji, która tworzy miniaturki ze wszystkich obsługiwanych przez GD plików graficznych... Nie wiem czego wiecej możesz chcieć.
Master Miko
Chyba rozumiem... czyli php nie musi używać jakiegoś "converta" tylko pobiera źródło pliku, zapisuje jako swoje, a potem manipuluje się funkcjami jakimi się tylko chce... czy dobrze zrozumiałem?

Jeśli tak... dziękuję Ci ogromnie bardzo smile.gif


A teraz reszta pytań

1.chciałbym, aby jeśli jakiś plik nie istnieje, zamist normalnego krzyżyka, pojawiał się przeze mnie ustalony plik obrazkowy

2. Jakie zabezpieczenia polecilibyście zastosować?
crash
Zamiast:
  1. <?php
  2. die( 'Nie Można otworzyć Pliku - ' . $imgName );
  3. ?>

Daj:
  1. <?php
  2. header( 'Content-type: image/jpeg' );
  3. readfile( './ustalony_plik_obrazkowy.jpg' );
  4. ?>


O zabezpieczeniach dużo można gadać, przede wszystkim przeanalizuj jakie dane dostaje skrypt przez _GET.
Master Miko
Dziękuję JESZCZE RAZ!!!! Należy Ci się za to ogromny plus smile.gif (za zadawanie się z takimi noobami jak ja tongue.gif )

A zabezpiecznie? co ze zmiennymi? Sprawdzić, żeby to była liczba - argument scale itp?
crash
  1. <?php
  2. $imgName = ( isset( $_GET[ 'dir' ] ) and file_exists( $_GET[ 'dir' ] ) ) ? $_GET[ 'dir' ] : './ustalony_plik_obrazkowy.jpg';
  3. $size = isset( $_GET[ 'scale' ] ) ? (int)$_GET[ 'scale' ] : 50;
  4. ?>

Takie coś starczyłoby na początek, pokombinuj... Koniec pomocy. Czas zacząć myśleć samodzielnie...
Master Miko
Cytat(crash @ 2006-02-14 19:02:50)
Takie coś starczyłoby na początek, pokombinuj... Koniec pomocy. Czas zacząć myśleć samodzielnie...

Dziękuję Ci bardzo smile.gif
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.