Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [GD]Funkcja tworząca ikonki .jpg, Adaptacja do .gif i .png
Master Miko
post 14.02.2006, 17:04:16
Post #1





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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.


--------------------
Go to the top of the page
+Quote Post
Apo
post 14.02.2006, 17:54:58
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


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.
Go to the top of the page
+Quote Post
crash
post 14.02.2006, 18:06:48
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 14.02.2006, 18:56:38
Post #4





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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

Ten post edytował Master Miko 14.02.2006, 19:02:26


--------------------
Go to the top of the page
+Quote Post
crash
post 14.02.2006, 19:15:31
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 14.02.2006, 19:19:52
Post #6





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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

Ten post edytował Master Miko 14.02.2006, 19:31:24


--------------------
Go to the top of the page
+Quote Post
crash
post 14.02.2006, 19:35:49
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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.


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 14.02.2006, 19:37:19
Post #8





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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?


--------------------
Go to the top of the page
+Quote Post
crash
post 14.02.2006, 20:02:50
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 14.02.2006, 23:16:18
Post #10





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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


--------------------
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 Wersja Lo-Fi Aktualny czas: 19.06.2025 - 17:52