Загрузка, изменение размера и обрезка изображения с помощью PHP

Я хочу создать очень простой базовый сценарий загрузки, изменения размера и обрезания PHP. Функциональность для этого будет одинаковой (в любом случае, я все-таки проверял) на метод Twitter, используемый для загрузки изображений аватаров.

Я хочу, чтобы сценарий принимал любое изображение размера, изменял размер самой короткой стороны до 116 пикселей, а затем обрезал верхнюю и нижнюю (или левую и правую сторону, если это пейзаж), чтобы получить квадрат 116px на 116 пикселей.

Мне не нужен раздутый PHP-скрипт с изменением размера клиентской стороны или что-то еще, просто изменение размера и урожая PHP. Как это делается?

Библиотека GD – это хорошее место для начала.

http://www.php.net/manual/en/book.image.php

Там есть простая в использовании библиотека с открытым исходным кодом под названием PHP Image Magician . Он использует GD, но упрощает его использование до 3 строк.

Пример использования базы:

$magicianObj = new imageLib('racecar.jpg'); $magicianObj -> resizeImage(100, 200, 'crop'); $magicianObj -> saveImage('racecar_small.png'); 

Если вы хотите, чтобы пример работал из моего загружаемого, измененного размера и класса урожая, все это плюс некоторые другие интересные вещи – вы можете использовать все это, если необходимо, или просто взять бит, который вам нравится:

http://www.mjdigital.co.uk/blog/php-upload-and-resize-image-class/

Я не думаю, что это слишком раздуто! – вы можете просто сделать что-то это (не проверено):

 if ((isset ($ _ FILES ['file'] ['error'])) && ($ _ FILES ['file'] ['error'] == 0)) {// если файл был отправлен, загрузите его
     включают в себя ( 'INCLUDE_CLASS_FILE_HERE.php');
     $ myImage = new _image;
     // загрузить изображение
     $ myImage-> uploadTo = 'uploads /';  // УСТАНОВИТЬ ЗАГРУЗКУ ПАДЕНИЯ ЗДЕСЬ
     $ myImage-> returnType = 'array';  // RETURN ARRAY ИЗОБРАЖЕНИЙ ИЗОБРАЖЕНИЯ
     $ img = $ myImage-> upload ($ _ FILES ['file']);
     if ($ img) {
         $ myImage-> newWidth = 116;
         $ myImage-> newHeight = 116;
         $ i = $ myImage-> resize ();  // изменяет размер до 116px, сохраняя соотношение сторон
         // получить новую высоту изображения
         $ imgWidth = $ i ['width'];
         // получить новую ширину изображения
         $ imgHeight = $ i ['height'];
         если ($ i) {
             // выработать, где его обрезать
             $ cropX = ($ imgWidth> 116)?  (($ imgWidth-116) / 2): 0;
             $ cropY = ($ imgHeight> 116)?  (($ imgHeight-116) / 2): 0;
             $ cropped = $ myImage-> crop (116,116, $ cropX, $ cropY);
             if ($ cropped) {echo 'It Worked (я думаю!)';  print_r ($ обрезается);
             } else {echo 'Crop failed';  }
         } else {echo 'Resize failed';  }
     } else {echo 'Upload failed';  }

Я сделал эту простую функцию, которая очень проста в использовании, она позволяет изменять размер, обрезать и центрировать изображение до определенной ширины и высоты, оно может поддерживать JPG, PNG и GIF. Не стесняйтесь копировать и вставлять его в свой код:

 function resize_imagejpg($file, $w, $h, $finaldst) { list($width, $height) = getimagesize($file); $src = imagecreatefromjpeg($file); $ir = $width/$height; $fir = $w/$h; if($ir >= $fir){ $newheight = $h; $newwidth = $w * ($width / $height); } else { $newheight = $w / ($width/$height); $newwidth = $w; } $xcor = 0 - ($newwidth - $w) / 2; $ycor = 0 - ($newheight - $h) / 2; $dst = imagecreatetruecolor($w, $h); imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, $width, $height); imagejpeg($dst, $finaldst); imagedestroy($dst); return $file; } function resize_imagegif($file, $w, $h, $finaldst) { list($width, $height) = getimagesize($file); $src = imagecreatefromgif($file); $ir = $width/$height; $fir = $w/$h; if($ir >= $fir){ $newheight = $h; $newwidth = $w * ($width / $height); } else { $newheight = $w / ($width/$height); $newwidth = $w; } $xcor = 0 - ($newwidth - $w) / 2; $ycor = 0 - ($newheight - $h) / 2; $dst = imagecreatetruecolor($w, $h); $background = imagecolorallocatealpha($dst, 0, 0, 0, 127); imagecolortransparent($dst, $background); imagealphablending($dst, false); imagesavealpha($dst, true); imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, $width, $height); imagegif($dst, $finaldst); imagedestroy($dst); return $file; } function resize_imagepng($file, $w, $h, $finaldst) { list($width, $height) = getimagesize($file); $src = imagecreatefrompng($file); $ir = $width/$height; $fir = $w/$h; if($ir >= $fir){ $newheight = $h; $newwidth = $w * ($width / $height); } else { $newheight = $w / ($width/$height); $newwidth = $w; } $xcor = 0 - ($newwidth - $w) / 2; $ycor = 0 - ($newheight - $h) / 2; $dst = imagecreatetruecolor($w, $h); $background = imagecolorallocate($dst, 0, 0, 0); imagecolortransparent($dst, $background); imagealphablending($dst, false); imagesavealpha($dst, true); imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight,$width, $height); imagepng($dst, $finaldst); imagedestroy($dst); return $file; } function ImageResize($file, $w, $h, $finaldst) { $getsize = getimagesize($file); $image_type = $getsize[2]; if( $image_type == IMAGETYPE_JPEG) { resize_imagejpg($file, $w, $h, $finaldst); } elseif( $image_type == IMAGETYPE_GIF ) { resize_imagegif($file, $w, $h, $finaldst); } elseif( $image_type == IMAGETYPE_PNG ) { resize_imagepng($file, $w, $h, $finaldst); } } 

Все, что вам нужно сделать, это вызвать его так:

 ImageResize(image, width, height, destination); 

Например

 ImageResize("uploads/face.png", 100, 150, "images/user332profilepic.png");