Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]cropowanie zdjęć
Forum PHP.pl > Forum > Przedszkole
acztery
hej,

Mam katalog w którym jest 10 tys fotek. Chciałbym zrobić miniaturki i crop na nich.

ma ktoś taki skrypt.

Zdjęcia mam np 1000x900 px

i teraz skrypt z takiego zdjecia zrobi 150x150

taka miniatruka... rzecz jasna skrypt najpier zmniejsza potem odp ucina tak zeby pasowalo ...

mam coś takiego: to coś robi ładnie miniaturę ale croop nie.. sad.gif

  1. class SimpleImage {
  2.  
  3. var $image;
  4. var $image_type;
  5.  
  6. function load($filename) {
  7. $image_info = getimagesize($filename);
  8. $this->image_type = $image_info[2];
  9. if( $this->image_type == IMAGETYPE_JPEG ) {
  10. $this->image = imagecreatefromjpeg($filename);
  11. } elseif( $this->image_type == IMAGETYPE_GIF ) {
  12. $this->image = imagecreatefromgif($filename);
  13. } elseif( $this->image_type == IMAGETYPE_PNG ) {
  14. $this->image = imagecreatefrompng($filename);
  15. }
  16. }
  17. function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
  18. if( $image_type == IMAGETYPE_JPEG ) {
  19. imagejpeg($this->image,$filename,$compression);
  20. } elseif( $image_type == IMAGETYPE_GIF ) {
  21. imagegif($this->image,$filename);
  22. } elseif( $image_type == IMAGETYPE_PNG ) {
  23. imagepng($this->image,$filename);
  24. }
  25. if( $permissions != null) {
  26. chmod($filename,$permissions);
  27. }
  28. }
  29. function output($image_type=IMAGETYPE_JPEG) {
  30. if( $image_type == IMAGETYPE_JPEG ) {
  31. imagejpeg($this->image);
  32. } elseif( $image_type == IMAGETYPE_GIF ) {
  33. imagegif($this->image);
  34. } elseif( $image_type == IMAGETYPE_PNG ) {
  35. imagepng($this->image);
  36. }
  37. }
  38. function getWidth() {
  39. return imagesx($this->image);
  40. }
  41. function getHeight() {
  42. return imagesy($this->image);
  43. }
  44. function resizeToHeight($height) {
  45. $ratio = $height / $this->getHeight();
  46. $width = $this->getWidth() * $ratio;
  47. $this->resize($width,$height);
  48. }
  49. function resizeToWidth($width) {
  50. $ratio = $width / $this->getWidth();
  51. $height = ($this->getheight() * $ratio);
  52. $this->resize($width,$height);
  53. }
  54. function scale($scale) {
  55. $width = $this->getWidth() * $scale/100;
  56. $height = $this->getheight() * $scale/100;
  57. $this->resize($width,$height);
  58. }
  59. function resize($width,$height) {
  60. $new_image = imagecreatetruecolor($width, $height);
  61. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  62. $this->image = $new_image;
  63. }
  64. }



tak odpalam skrypt dla każdego pliku:


$dest_image = "/beta/upload/gallery/small/1/".$file;


  1. $image = new SimpleImage();
  2. $image->load($dest_image);
  3. $image->resizeToWidth(10);
  4. $image->save($dest_image);


acztery
prawie.

ale to chyba nie da rady


zrobić z obraza 1000:1564px

obrazka 150x150

to bedzie to:

  1. $img->load('img/lr.jpg');
  2. $img->rotate(40, 0xFFFFFF);
  3. $img->crop(150, 150, x, y);
  4. $img->save('img/rotate_crop.jpg');


to mi utnie ale zeby to wyzej zrobic bede musial juz miec miniature....

a skrypt ma za 1 razem zrobic miniaturke i potem przycina... najlepiej jak by cropowal idąc od srodka zdjecia ...

PS sory za bledy..

aha nie wszystkie zdjecia duze maja taki sam rozmiar...
!*!
Już nie pamiętam jak ta klasa działa, a nie mam teraz jak tego sprawdzić, ale wiem że jest do zrobienia to czego potrzebujesz w niej, a wielkość obrazu nie ma tu znaczenia.
acztery
OK działa:


  1. $img = new Image();
  2. $img->load($dest_image_);
  3. $img->zoom(150, 150);
  4. $img->save($dest_image);
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.