2012-06-26 160 views
2

可能重复:
Resize a picture to a fixed sizephp - 调整大小并保存图像?

我使用下面的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?我做错了什么?

+2

您的代码没有做任何调整大小..你要做的就是覆盖计算值和getimagesize回报 – Ben

+1

你只是在内存中改变宽度值,实际上从未做过任何的图像(除了重命名)。 – sachleen

+1

虽然是一个基本的错误,但不值得赞赏 – Ben

回答

9

变量$image_size['0']不是对实际图像大小的引用。

您需要计算尺寸的比例,然后使用调整图像大小的适当功能重新调整它的大小,可能在GD library

首先,您必须加载图像。我会让你选择是什么类型:

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

我找到了simple class for resizing images。为了防止链接腐烂,我在这里重新创建它:

<?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; 
    }  

} 
?> 
+0

要保持图像在700x500:$ ratio = max(700/imagesx($ image),500/imagesy($ image)); –

2

您正在设置一个变量,而不是调整图像的大小。我挖了一些旧功能,你需要传递图像对象,保存路径,图像名称,最大高度,最大宽度和质量。这不是最好的功能,但它完成了工作。

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); 
} 
+0

因为在代码的其余部分没有使用它,所以创建'$ image'有什么意义?之后你只使用'$ image_p'和'$ source'。 –

+1

没有意义,你也不应该解除任何IMO。这是回来,所以我不记得为什么我这样做:) – sed

+0

如果你已经上传文件到服务器,你应该将所有$ imgObject ['tmp_name']代码更改为$ imgObject。这对我很有用,谢谢你,保存我的夜晚;) – matasoy

相关问题