使用php调整图像大小 [英] Resizing images using php

查看:114
本文介绍了使用php调整图像大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用一个整洁的小php脚本来调整我的图像,以适应300x300像素的正方形,同时保持宽高比。我从此处获取了脚本

I'm using a neat little php script to resize my images to fit in a 300x300 pixel square, while keeping the aspect ratio. I got the script from here.

这里是整个脚本:

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

}
?>

这里是我如何使用它:

    $image = new SimpleImage();
    $image->load($_FILES['uploaded_image']['tmp_name']);
    $image->resizeToWidth(300);
    $image->resizeToHeight(300);
    $image->save('./images/photo'.$id.'.jpg');
    header("Location: people.php");
    exit;

这里是我的问题:
它只调整高度。所以如果我给它一个1200x990(宽x高)图像,它吐出一个
400x300(如果这是有道理的),这是不适合我的300x300平方。

And here's my problem: It only resizes the height. So if I gave it a 1200x990 (width x height) image, it spits out a 400x300 (if that makes sense), which is does not fit within my 300x300 square.

我也尝试过:

    $image = new SimpleImage();
    $image2 = new SimpleImage();
    $image->load($_FILES['uploaded_image']['tmp_name']);
    $image->resizeToWidth(300);
    $image->save('temp.jpg');
    $image2->load('temp.jpg');
    $image2->resizeToHeight(300);
    $image2->save('./images/photo'.$id.'.jpg');
    unlink('temp.jpg');
    header("Location: people.php");
    exit;

对于可怕的大量代码,我认为我最好包括源代码,

Sorry for the horrid mass of code, I thought I had better include the source just in case the place where I got it from moves or shuts down.

任何神圣的程序员都在那里?

Any godly coders out there?

推荐答案

它的工作正常 - 它的大小调整到300的高度,并保持宽高比(在这种情况下,使宽度400)。您需要首先查看哪个边是最大的边(或者更准确地说,最远离您所需的宽高比的边),然后只调用一个函数(resizeToWidth()或resizeToHeight())。

It's working correctly - it's resizing to a height of 300 and keeping the aspect ratio (which, in this case, makes the width 400). You need to see which side is the biggest side (or, more accurately, the side furthest from the aspect ratio you require) first, and then only call one function (resizeToWidth() or resizeToHeight()).

如果我不得不使用该类,我认为这将工作:

If I had to use that class, I think this will work:

$image = new SimpleImage();
$size = getImageSize($_FILES['uploaded_image']['tmp_name']);
if ($size[0] > 300) {
    $image->load($_FILES['uploaded_image']['tmp_name']);
    $image->resizeToWidth(300);
    $image->save('./images/photo'.$id.'.jpg');
} else {
    move_uploaded_file($_FILES['uploaded_image']['tmp_name'], './images/photo'.$id.'.jpg');
}

$size = getImageSize('./images/photo'.$id.'.jpg');
if ($size[1] > 300) {
    $image->load('./images/photo'.$id.'.jpg');
    $image->resizeToHeight(300);
    $image->save('./images/photo'.$id.'.jpg');
}

header("Location: people.php");
exit;

这篇关于使用php调整图像大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆