Я хочу написать код PHP, который автоматически изменяет размер любого изображения, загруженного через форму, до 147x147 пикселей, но я понятия не имею, как это сделать (я относительный новичок в PHP).
Пока что изображения загружаются успешно, типы файлов распознаются и имена очищаются, но я хотел бы добавить в код функцию изменения размера. Например, у меня есть тестовое изображение размером 2,3 МБ и размером 1331x1331, и я бы хотел, чтобы код уменьшил его размер, что, как я предполагаю, также значительно сожмет размер файла изображения.
Пока что у меня есть следующее:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n);
} else {
$bad_message = "Please ensure your chosen file is less than 5MB.";
}
} else {
$bad_message = "Please ensure your image is of filetype .jpg or.png.";
}
}
$query = "INSERT INTO users (image) VALUES ('$n')";
mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
php
image-processing
image-resizing
image-upload
Алекс Райанс
источник
источник
upload_max_filesize
inphp.ini
, во-первых, можно ли загрузить файл размером большеupload_max_filesize
?. Есть ли шанс изменить размер изображения больше чемupload_max_filesize
? без измененияupload_max_filesize
вphp.ini
Ответы:
Для работы с изображениями необходимо использовать функции PHP ImageMagick или GD .
С GD, например, это так же просто, как ...
function resize_image($file, $w, $h, $crop=FALSE) { list($width, $height) = getimagesize($file); $r = $width / $height; if ($crop) { if ($width > $height) { $width = ceil($width-($width*abs($r-$w/$h))); } else { $height = ceil($height-($height*abs($r-$w/$h))); } $newwidth = $w; $newheight = $h; } else { if ($w/$h > $r) { $newwidth = $h*$r; $newheight = $h; } else { $newheight = $w/$r; $newwidth = $w; } } $src = imagecreatefromjpeg($file); $dst = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); return $dst; }
И вы могли бы вызвать эту функцию вот так ...
$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);
По личному опыту, повторная выборка изображения GD также значительно уменьшает размер файла, особенно при повторной выборке необработанных изображений цифровой камеры.
источник
BLOB
s? Я бы рекомендовал хранить изображения в файловой системе и вставлять ссылки в вашу базу данных. Я также рекомендую прочитать полную документацию GD (или ImageMagick), чтобы узнать, какие еще варианты у вас есть.abs()
, например,ceil($width-($width*abs($r-$w/$h)))
и то же самое к части высоты. Это нужно в некоторых случаях.http://wallpapercave.com/wp/wc1701171.jpg
до 400x128 (баннер) привело к созданию черного изображения; Я не могу понять, почему он это делает.imagejpeg($dst, $file);
послеimagecopyresampled($dst,...
строки. Измените,$file
если не хотите перезаписывать оригинал.Этот ресурс(неработающая ссылка) также заслуживает внимания - очень аккуратный код, использующий GD. Однако я изменил их окончательный фрагмент кода, чтобы создать эту функцию, которая соответствует требованиям OP ...function store_uploaded_image($html_element_name, $new_img_width, $new_img_height) { $target_dir = "your-uploaded-images-folder/"; $target_file = $target_dir . basename($_FILES[$html_element_name]["name"]); $image = new SimpleImage(); $image->load($_FILES[$html_element_name]['tmp_name']); $image->resize($new_img_width, $new_img_height); $image->save($target_file); return $target_file; //return name of saved file in case you want to store it in you database or show confirmation message to user }
Вам также нужно будет включить этот файл PHP ...
<?php /* * File: SimpleImage.php * Author: Simon Jarvis * Copyright: 2006 Simon Jarvis * Date: 08/11/06 * Link: http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details: * http://www.gnu.org/licenses/gpl.html * */ class SimpleImage { var $image; var $image_type; function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if( $this->image_type == IMAGETYPE_JPEG ) { $this->image = imagecreatefromjpeg($filename); } elseif( $this->image_type == IMAGETYPE_GIF ) { $this->image = imagecreatefromgif($filename); } elseif( $this->image_type == IMAGETYPE_PNG ) { $this->image = imagecreatefrompng($filename); } } function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image,$filename,$compression); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image,$filename); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image,$filename); } if( $permissions != null) { chmod($filename,$permissions); } } function output($image_type=IMAGETYPE_JPEG) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image); } } function getWidth() { return imagesx($this->image); } function getHeight() { return imagesy($this->image); } function resizeToHeight($height) { $ratio = $height / $this->getHeight(); $width = $this->getWidth() * $ratio; $this->resize($width,$height); } function resizeToWidth($width) { $ratio = $width / $this->getWidth(); $height = $this->getheight() * $ratio; $this->resize($width,$height); } function scale($scale) { $width = $this->getWidth() * $scale/100; $height = $this->getheight() * $scale/100; $this->resize($width,$height); } function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } } ?>
источник
Простая функция использования PHP ( масштабирование изображений ):
Синтаксис:
Пример:
Шаг: 1 Прочтите файл
$image_name = 'path_of_Image/Name_of_Image.jpg|png';
Шаг: 2: Загрузите файл изображения
$image = imagecreatefromjpeg($image_name); // For JPEG //or $image = imagecreatefrompng($image_name); // For PNG
Шаг: 3: Наш Life-saver входит в "_" | Масштабировать изображение
$imgResized = imagescale($image , 500, 400); // width=500 and height = 400 // $imgResized is our final product
Примечание: масштаб изображения будет работать для (PHP 5> = 5.5.0, PHP 7)
Источник: Нажмите, чтобы узнать больше
источник
Если вас не волнует соотношение сторон (т. Е. Вы хотите заставить изображение соответствовать определенному измерению), вот упрощенный ответ
// for jpg function resize_imagejpg($file, $w, $h) { list($width, $height) = getimagesize($file); $src = imagecreatefromjpeg($file); $dst = imagecreatetruecolor($w, $h); imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height); return $dst; } // for png function resize_imagepng($file, $w, $h) { list($width, $height) = getimagesize($file); $src = imagecreatefrompng($file); $dst = imagecreatetruecolor($w, $h); imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height); return $dst; } // for gif function resize_imagegif($file, $w, $h) { list($width, $height) = getimagesize($file); $src = imagecreatefromgif($file); $dst = imagecreatetruecolor($w, $h); imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height); return $dst; }
Теперь займемся загрузкой. Сначала загрузите файл в желаемый каталог. Затем вызывается одна из указанных выше функций в зависимости от типа файла (jpg, png или gif) и передается абсолютный путь к загруженному файлу, как показано ниже:
// jpg change the dimension 750, 450 to your desired values $img = resize_imagejpg('path/image.jpg', 750, 450);
Возвращаемое значение
$img
- объект ресурса. Мы можем сохранить в новом месте или заменить оригинал, как показано ниже:// again for jpg imagejpeg($img, 'path/newimage.jpg');
Надеюсь, это кому-то поможет. Проверьте эти ссылки, чтобы узнать больше об изменении размера Imagick :: resizeImage и imagejpeg ()
источник
upload_max_filesize
inphp.ini
, во-первых, вы не можете загрузить файл размером большеupload_max_filesize
. Есть ли шанс , чтобы изменить размер изображения размера больше , чемupload_max_filesize
без измененияupload_max_filesize
вphp.ini
Надеюсь, это сработает для вас.
/** * Image re-size * @param int $width * @param int $height */ function ImageResize($width, $height, $img_name) { /* Get original file size */ list($w, $h) = getimagesize($_FILES['logo_image']['tmp_name']); /*$ratio = $w / $h; $size = $width; $width = $height = min($size, max($w, $h)); if ($ratio < 1) { $width = $height * $ratio; } else { $height = $width / $ratio; }*/ /* Calculate new image size */ $ratio = max($width/$w, $height/$h); $h = ceil($height / $ratio); $x = ($w - $width / $ratio) / 2; $w = ceil($width / $ratio); /* set new file name */ $path = $img_name; /* Save image */ if($_FILES['logo_image']['type']=='image/jpeg') { /* Get binary data from image */ $imgString = file_get_contents($_FILES['logo_image']['tmp_name']); /* create image from string */ $image = imagecreatefromstring($imgString); $tmp = imagecreatetruecolor($width, $height); imagecopyresampled($tmp, $image, 0, 0, $x, 0, $width, $height, $w, $h); imagejpeg($tmp, $path, 100); } else if($_FILES['logo_image']['type']=='image/png') { $image = imagecreatefrompng($_FILES['logo_image']['tmp_name']); $tmp = imagecreatetruecolor($width,$height); imagealphablending($tmp, false); imagesavealpha($tmp, true); imagecopyresampled($tmp, $image,0,0,$x,0,$width,$height,$w, $h); imagepng($tmp, $path, 0); } else if($_FILES['logo_image']['type']=='image/gif') { $image = imagecreatefromgif($_FILES['logo_image']['tmp_name']); $tmp = imagecreatetruecolor($width,$height); $transparent = imagecolorallocatealpha($tmp, 0, 0, 0, 127); imagefill($tmp, 0, 0, $transparent); imagealphablending($tmp, true); imagecopyresampled($tmp, $image,0,0,0,0,$width,$height,$w, $h); imagegif($tmp, $path); } else { return false; } return true; imagedestroy($image); imagedestroy($tmp); }
источник
Я создал простую в использовании библиотеку для изменения размера изображений. Его можно найти здесь, на Github .
Пример использования библиотеки:
// Include PHP Image Magician library require_once('php_image_magician.php'); // Open JPG image $magicianObj = new imageLib('racecar.jpg'); // Resize to best fit then crop (check out the other options) $magicianObj -> resizeImage(100, 200, 'crop'); // Save resized image as a PNG (or jpg, bmp, etc) $magicianObj -> saveImage('racecar_small.png');
Другие функции, если они вам понадобятся, включают:
источник
( ВАЖНО : в случае изменения размера анимации (анимированного webp или gif) результатом будет не анимированное, а измененное изображение из первого кадра! (Исходная анимация остается неизменной ...)
Я создал это для своего проекта php 7.2 (пример imagebmp sure (PHP 7> = 7.2.0): php / manual / function.imagebmp ) о techfry.com/php-tutorial , с GD2 (так что ничего сторонней библиотеки) и очень похож на ответ Нико Бистольфи, но работает со всеми пятью основными типами изображений ( png, jpeg, webp, bmp и gif ), создавая новый файл с измененным размером , не изменяя исходный, и все это в одной функции и готов к использованию (скопируйте и вставьте в свой проект). (Вы можете установить расширение нового файла с помощью пятого параметра или просто оставить его, если хотите сохранить исходный):
function createResizedImage( string $imagePath = '', string $newPath = '', int $newWidth = 0, int $newHeight = 0, string $outExt = 'DEFAULT' ) : ?string { if (!$newPath or !file_exists ($imagePath)) { return null; } $types = [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF, IMAGETYPE_BMP, IMAGETYPE_WEBP]; $type = exif_imagetype ($imagePath); if (!in_array ($type, $types)) { return null; } list ($width, $height) = getimagesize ($imagePath); $outBool = in_array ($outExt, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']); switch ($type) { case IMAGETYPE_JPEG: $image = imagecreatefromjpeg ($imagePath); if (!$outBool) $outExt = 'jpg'; break; case IMAGETYPE_PNG: $image = imagecreatefrompng ($imagePath); if (!$outBool) $outExt = 'png'; break; case IMAGETYPE_GIF: $image = imagecreatefromgif ($imagePath); if (!$outBool) $outExt = 'gif'; break; case IMAGETYPE_BMP: $image = imagecreatefrombmp ($imagePath); if (!$outBool) $outExt = 'bmp'; break; case IMAGETYPE_WEBP: $image = imagecreatefromwebp ($imagePath); if (!$outBool) $outExt = 'webp'; } $newImage = imagecreatetruecolor ($newWidth, $newHeight); //TRANSPARENT BACKGROUND $color = imagecolorallocatealpha ($newImage, 0, 0, 0, 127); //fill transparent back imagefill ($newImage, 0, 0, $color); imagesavealpha ($newImage, true); //ROUTINE imagecopyresampled ($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); // Rotate image on iOS if(function_exists('exif_read_data') && $exif = exif_read_data($imagePath, 'IFD0')) { if(isset($exif['Orientation']) && isset($exif['Make']) && !empty($exif['Orientation']) && preg_match('/(apple|ios|iphone)/i', $exif['Make'])) { switch($exif['Orientation']) { case 8: if ($width > $height) $newImage = imagerotate($newImage,90,0); break; case 3: $newImage = imagerotate($newImage,180,0); break; case 6: $newImage = imagerotate($newImage,-90,0); break; } } } switch (true) { case in_array ($outExt, ['jpg', 'jpeg']): $success = imagejpeg ($newImage, $newPath); break; case $outExt === 'png': $success = imagepng ($newImage, $newPath); break; case $outExt === 'gif': $success = imagegif ($newImage, $newPath); break; case $outExt === 'bmp': $success = imagebmp ($newImage, $newPath); break; case $outExt === 'webp': $success = imagewebp ($newImage, $newPath); } if (!$success) { return null; } return $newPath; }
источник
.cr2, .dng, .nef
и т.п. )? У GD2 нет поддержки, и после долгих усилий я смог настроить ImageMagick. Но это не удается с ошибкой тайм-аута соединения при чтении файла. И журнала ошибок тоже нет ..Вот расширенная версия ответа @Ian Atkin '. Я обнаружил, что это работает очень хорошо. Для больших изображений то есть :). Вы можете увеличить изображения меньшего размера, если не будете осторожны. Изменения: - Поддерживает файлы jpg, jpeg, png, gif, bmp - Сохраняет прозрачность для .png и .gif - Двойная проверка, не меньше ли размер оригинала - Заменяет изображение, предоставленное напрямую (это то, что мне нужно)
Итак, вот оно. Значения функции по умолчанию - «золотое правило».
function resize_image($file, $w = 1200, $h = 741, $crop = false) { try { $ext = pathinfo(storage_path() . $file, PATHINFO_EXTENSION); list($width, $height) = getimagesize($file); // if the image is smaller we dont resize if ($w > $width && $h > $height) { return true; } $r = $width / $height; if ($crop) { if ($width > $height) { $width = ceil($width - ($width * abs($r - $w / $h))); } else { $height = ceil($height - ($height * abs($r - $w / $h))); } $newwidth = $w; $newheight = $h; } else { if ($w / $h > $r) { $newwidth = $h * $r; $newheight = $h; } else { $newheight = $w / $r; $newwidth = $w; } } $dst = imagecreatetruecolor($newwidth, $newheight); switch ($ext) { case 'jpg': case 'jpeg': $src = imagecreatefromjpeg($file); break; case 'png': $src = imagecreatefrompng($file); imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127)); imagealphablending($dst, false); imagesavealpha($dst, true); break; case 'gif': $src = imagecreatefromgif($file); imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127)); imagealphablending($dst, false); imagesavealpha($dst, true); break; case 'bmp': $src = imagecreatefrombmp($file); break; default: throw new Exception('Unsupported image extension found: ' . $ext); break; } $result = imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); switch ($ext) { case 'bmp': imagewbmp($dst, $file); break; case 'gif': imagegif($dst, $file); break; case 'jpg': case 'jpeg': imagejpeg($dst, $file); break; case 'png': imagepng($dst, $file); break; } return true; } catch (Exception $err) { // LOG THE ERROR HERE return false; } }
источник
$w === $width && $h === $height
. Думаю об этом. Должны быть>=
и>=
сравнения. @DanielZF торт:
<?php class FkuController extends Zend_Controller_Action { var $image; var $image_type; public function store_uploaded_image($html_element_name, $new_img_width, $new_img_height) { $target_dir = APPLICATION_PATH . "/../public/1/"; $target_file = $target_dir . basename($_FILES[$html_element_name]["name"]); //$image = new SimpleImage(); $this->load($_FILES[$html_element_name]['tmp_name']); $this->resize($new_img_width, $new_img_height); $this->save($target_file); return $target_file; //return name of saved file in case you want to store it in you database or show confirmation message to user public function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if( $this->image_type == IMAGETYPE_JPEG ) { $this->image = imagecreatefromjpeg($filename); } elseif( $this->image_type == IMAGETYPE_GIF ) { $this->image = imagecreatefromgif($filename); } elseif( $this->image_type == IMAGETYPE_PNG ) { $this->image = imagecreatefrompng($filename); } } public function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image,$filename,$compression); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image,$filename); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image,$filename); } if( $permissions != null) { chmod($filename,$permissions); } } public function output($image_type=IMAGETYPE_JPEG) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image); } } public function getWidth() { return imagesx($this->image); } public function getHeight() { return imagesy($this->image); } public function resizeToHeight($height) { $ratio = $height / $this->getHeight(); $width = $this->getWidth() * $ratio; $this->resize($width,$height); } public function resizeToWidth($width) { $ratio = $width / $this->getWidth(); $height = $this->getheight() * $ratio; $this->resize($width,$height); } public function scale($scale) { $width = $this->getWidth() * $scale/100; $height = $this->getheight() * $scale/100; $this->resize($width,$height); } public function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } public function savepicAction() { ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $this->_response->setHeader('Access-Control-Allow-Origin', '*'); $this->db = Application_Model_Db::db_load(); $ouser = $_POST['ousername']; $fdata = 'empty'; if (isset($_FILES['picture']) && $_FILES['picture']['size'] > 0) { $file_size = $_FILES['picture']['size']; $tmpName = $_FILES['picture']['tmp_name']; //Determine filetype switch ($_FILES['picture']['type']) { case 'image/jpeg': $ext = "jpg"; break; case 'image/png': $ext = "png"; break; case 'image/jpg': $ext = "jpg"; break; case 'image/bmp': $ext = "bmp"; break; case 'image/gif': $ext = "gif"; break; default: $ext = ''; break; } if($ext) { //if($file_size<400000) { $img = $this->store_uploaded_image('picture', 90,82); //$fp = fopen($tmpName, 'r'); $fp = fopen($img, 'r'); $fdata = fread($fp, filesize($tmpName)); $fdata = base64_encode($fdata); fclose($fp); //} } } if($fdata=='empty'){ } else { $this->db->update('users', array( 'picture' => $fdata, ), array('username=?' => $ouser )); } }
источник
Я нашел математический способ выполнить эту работу
Репозиторий Github - https://github.com/gayanSandamal/easy-php-image-resizer
Живой пример - https://plugins.nayague.com/easy-php-image-resizer/
<?php //path for the image $source_url = '2018-04-01-1522613288.PNG'; //separate the file name and the extention $source_url_parts = pathinfo($source_url); $filename = $source_url_parts['filename']; $extension = $source_url_parts['extension']; //define the quality from 1 to 100 $quality = 10; //detect the width and the height of original image list($width, $height) = getimagesize($source_url); $width; $height; //define any width that you want as the output. mine is 200px. $after_width = 200; //resize only when the original image is larger than expected with. //this helps you to avoid from unwanted resizing. if ($width > $after_width) { //get the reduced width $reduced_width = ($width - $after_width); //now convert the reduced width to a percentage and round it to 2 decimal places $reduced_radio = round(($reduced_width / $width) * 100, 2); //ALL GOOD! let's reduce the same percentage from the height and round it to 2 decimal places $reduced_height = round(($height / 100) * $reduced_radio, 2); //reduce the calculated height from the original height $after_height = $height - $reduced_height; //Now detect the file extension //if the file extension is 'jpg', 'jpeg', 'JPG' or 'JPEG' if ($extension == 'jpg' || $extension == 'jpeg' || $extension == 'JPG' || $extension == 'JPEG') { //then return the image as a jpeg image for the next step $img = imagecreatefromjpeg($source_url); } elseif ($extension == 'png' || $extension == 'PNG') { //then return the image as a png image for the next step $img = imagecreatefrompng($source_url); } else { //show an error message if the file extension is not available echo 'image extension is not supporting'; } //HERE YOU GO :) //Let's do the resize thing //imagescale([returned image], [width of the resized image], [height of the resized image], [quality of the resized image]); $imgResized = imagescale($img, $after_width, $after_height, $quality); //now save the resized image with a suffix called "-resized" and with its extension. imagejpeg($imgResized, $filename . '-resized.'.$extension); //Finally frees any memory associated with image //**NOTE THAT THIS WONT DELETE THE IMAGE imagedestroy($img); imagedestroy($imgResized); } ?>
источник
Вы можете попробовать библиотеку TinyPNG PHP. Используя эту библиотеку, ваше изображение автоматически оптимизируется в процессе изменения размера. Все, что вам нужно, чтобы установить библиотеку и получить ключ API с https://tinypng.com/developers . Чтобы установить библиотеку, выполните следующую команду.
composer require tinify/tinify
После этого ваш код выглядит следующим образом.
require_once("vendor/autoload.php"); \Tinify\setKey("YOUR_API_KEY"); $source = \Tinify\fromFile("large.jpg"); //image to be resize $resized = $source->resize(array( "method" => "fit", "width" => 150, "height" => 100 )); $resized->toFile("thumbnail.jpg"); //resized image
У меня есть блог на ту же тему http://artisansweb.net/resize-image-php-using-tinypng
источник
Я бы предложил простой способ:
function resize($file, $width, $height) { switch(pathinfo($file)['extension']) { case "png": return imagepng(imagescale(imagecreatefrompng($file), $width, $height), $file); case "gif": return imagegif(imagescale(imagecreatefromgif($file), $width, $height), $file); default : return imagejpeg(imagescale(imagecreatefromjpeg($file), $width, $height), $file); } }
источник
private function getTempImage($url, $tempName){ $tempPath = 'tempFilePath' . $tempName . '.png'; $source_image = imagecreatefrompng($url); // check type depending on your necessities. $source_imagex = imagesx($source_image); $source_imagey = imagesy($source_image); $dest_imagex = 861; // My default value $dest_imagey = 96; // My default value $dest_image = imagecreatetruecolor($dest_imagex, $dest_imagey); imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dest_imagex, $dest_imagey, $source_imagex, $source_imagey); imagejpeg($dest_image, $tempPath, 100); return $tempPath;
}
Это адаптированное решение, основанное на этом замечательном объяснении. Этот парень сделал пошаговое объяснение. Надеюсь, всем понравится.
источник