php – изменить размер и сохранить изображение?

Возможный дубликат:
Изменение размера изображения до фиксированного размера

Я использую следующий код php для изменения размера (ширины) и сохранения изображения, код работает без ошибок, но изображение не изменяется.

<?php $old_path = "users_images/".$name.".".$type; $new_path = "main_images/".$name.".".$type; $image_size = getimagesize($new_path); if($image_size['0'] > 700){ $image_size['0'] = 700; } rename($old_path, $new_path);// save image ?> 

в основном, если ширина изображения больше 700, я хочу установить его на 700? что я делаю неправильно?

Переменная $image_size['0'] не является ссылкой на фактический размер изображения.

Вам нужно будет рассчитать соотношение размеров, затем изменить его размер с помощью соответствующей функции, которая изменяет размеры изображений, возможно, в библиотеке GD .

Во-первых, вам нужно будет загрузить изображение. Я позволю вам выбрать тип:

 $image = imagecreatefromjpeg($new_path); $image = imagecreatefromgif($new_path); $image = imagecreatefrompng($new_path); 

Теперь вычислим соотношение:

 $ratio = 700 / imagesx($image); // 700 for the width you want... // imagesx() to determine the current width 

Получите масштабированную высоту:

 $height = imagesy($image) * $ratio; // imagesy() to determine the current height 

Сделайте фактическое изменение размера:

 $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image)); $image = $new_image; // $image has now been replaced with the resized one. 

Я нашел простой класс для изменения размеров изображений . Чтобы защитить от гниения ссылок, я воссоздал его здесь:

 <?php /* * File: SimpleImage.php * Author: Simon Jarvis * Copyright: 2006 Simon Jarvis * Date: 08/11/06 * Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.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; } } ?> 

Вы устанавливаете переменную, а не изменяете размер изображения. Я откопал какую-то старую функцию, вам нужно передать объект изображения, сохранить путь, имя изображения, максимальную высоту, максимальную ширину и качество. Это не самая лучшая функция, но это результат.

 function resizeImage($imgObject, $savePath, $imgName, $imgMaxWidth, $imgMaxHeight, $imgQuality) { $source = imagecreatefromjpeg($imgObject['tmp_name']); list($imgWidth, $imgHeight) = getimagesize($imgObject['tmp_name']); $imgAspectRatio = $imgWidth / $imgHeight; if ($imgMaxWidth / $imgMaxHeight > $imgAspectRatio) { $imgMaxWidth = $imgMaxHeight * $imgAspectRatio; } else { $imgMaxHeight = $imgMaxWidth / $imgAspectRatio; } $image_p = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight); $image = imagecreatefromjpeg($imgObject['tmp_name']); imagecopyresampled($image_p, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight); imagejpeg($image_p, $savePath . $imgName, $imgQuality); unset($imgObject); unset($source); unset($image_p); unset($image); } с function resizeImage($imgObject, $savePath, $imgName, $imgMaxWidth, $imgMaxHeight, $imgQuality) { $source = imagecreatefromjpeg($imgObject['tmp_name']); list($imgWidth, $imgHeight) = getimagesize($imgObject['tmp_name']); $imgAspectRatio = $imgWidth / $imgHeight; if ($imgMaxWidth / $imgMaxHeight > $imgAspectRatio) { $imgMaxWidth = $imgMaxHeight * $imgAspectRatio; } else { $imgMaxHeight = $imgMaxWidth / $imgAspectRatio; } $image_p = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight); $image = imagecreatefromjpeg($imgObject['tmp_name']); imagecopyresampled($image_p, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight); imagejpeg($image_p, $savePath . $imgName, $imgQuality); unset($imgObject); unset($source); unset($image_p); unset($image); } с function resizeImage($imgObject, $savePath, $imgName, $imgMaxWidth, $imgMaxHeight, $imgQuality) { $source = imagecreatefromjpeg($imgObject['tmp_name']); list($imgWidth, $imgHeight) = getimagesize($imgObject['tmp_name']); $imgAspectRatio = $imgWidth / $imgHeight; if ($imgMaxWidth / $imgMaxHeight > $imgAspectRatio) { $imgMaxWidth = $imgMaxHeight * $imgAspectRatio; } else { $imgMaxHeight = $imgMaxWidth / $imgAspectRatio; } $image_p = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight); $image = imagecreatefromjpeg($imgObject['tmp_name']); imagecopyresampled($image_p, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight); imagejpeg($image_p, $savePath . $imgName, $imgQuality); unset($imgObject); unset($source); unset($image_p); unset($image); } с function resizeImage($imgObject, $savePath, $imgName, $imgMaxWidth, $imgMaxHeight, $imgQuality) { $source = imagecreatefromjpeg($imgObject['tmp_name']); list($imgWidth, $imgHeight) = getimagesize($imgObject['tmp_name']); $imgAspectRatio = $imgWidth / $imgHeight; if ($imgMaxWidth / $imgMaxHeight > $imgAspectRatio) { $imgMaxWidth = $imgMaxHeight * $imgAspectRatio; } else { $imgMaxHeight = $imgMaxWidth / $imgAspectRatio; } $image_p = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight); $image = imagecreatefromjpeg($imgObject['tmp_name']); imagecopyresampled($image_p, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight); imagejpeg($image_p, $savePath . $imgName, $imgQuality); unset($imgObject); unset($source); unset($image_p); unset($image); } с function resizeImage($imgObject, $savePath, $imgName, $imgMaxWidth, $imgMaxHeight, $imgQuality) { $source = imagecreatefromjpeg($imgObject['tmp_name']); list($imgWidth, $imgHeight) = getimagesize($imgObject['tmp_name']); $imgAspectRatio = $imgWidth / $imgHeight; if ($imgMaxWidth / $imgMaxHeight > $imgAspectRatio) { $imgMaxWidth = $imgMaxHeight * $imgAspectRatio; } else { $imgMaxHeight = $imgMaxWidth / $imgAspectRatio; } $image_p = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight); $image = imagecreatefromjpeg($imgObject['tmp_name']); imagecopyresampled($image_p, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight); imagejpeg($image_p, $savePath . $imgName, $imgQuality); unset($imgObject); unset($source); unset($image_p); unset($image); } 

Вы должны скопировать / переместить изображение с помощью функции imagecopyresampled , которая является частью расширения GD.