php图片调整大小不适用于图片上传

时间:2012-08-03 17:57:11

标签: php image forms upload resize

我正在尝试调整正在我的php表单上传的图片的大小。图片正在保存但没有调整大小。基本上,除了调整图像部分的大小外,一切都工作正常。我把我的代码放在下面。

带有php的html表单,用于重新调整大小

<?php include "base.php"; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Submit an Album</title>
</head>
<body>

<?php
   if( isset($_POST['submit']) ) {

      include('SimpleImage.php');
      $image = new SimpleImage();
      $image->load($_FILES['albumCover']['tmp_name']);
      $image->resize(150,150);
      $image->output();
   } else {

?>

     <table>
        <tr>
        <td align="center">Submit an Album</td>
        </tr>
        <tr>
        <td>
     <table>
        <form enctype="multipart/form-data" action="submitAlbumForm.php" method="post">
        <tr>
          <td>Artist Name</td>
          <td><input type="text" name="artistName" size="20">
          </td>
        </tr>
        <tr>
          <td>Album Name</td>
          <td><input type="text" name="albumName" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Release Date</td>
          <td><input type="text" name="releaseDate" size="20">
          </td>
        </tr>
        <tr>        
        <tr>
          <td>Leak Date</td>
          <td><input type="text" name="leakDate" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Where It Leaked</td>
          <td><input type="text" name="whereItLeaked" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Album Cover</td>
          <td><input type="file" name="albumCover">
          </td>
        </tr>
        <tr>        
          <td></td>
          <td align="right"><input type="submit" name="submit" value="Add"></td>
        </tr>
        </form>
        </table>
      </td>
    </tr>
</table>

<?php
   }
?>

</body>
</html>

submitAlbumForm.php,用于将表单信息上传到数据库的php表单

<?php
include "base.php";

//Setting up images directory
$target = "images/"; 
$target = $target . basename( $_FILES['albumCover']['name']);

$albumCover=($_FILES['albumCover']['name']); 

//inserting data order
$order = "INSERT INTO albums
            (artistName, albumName, releaseDate, leakDate, whereItLeaked, albumCover)
            VALUES
            ('$_POST[artistName]',
            '$_POST[albumName]',
            '$_POST[releaseDate]',
            '$_POST[leakDate]',
            '$_POST[whereItLeaked]',
            '{$_FILES['albumCover']['name']}')";

 //Writes image to database
 mysql_query("INSERT INTO `albums` VALUES ('albumCover')") ; 

  if(move_uploaded_file($_FILES['albumCover']['tmp_name'], $target)) 
 { 

 //Tells you if its all ok 
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 

 //Gives an error if its not 
 echo "Sorry, there was a problem uploading your file."; 
 } 

//declare in the order variable
$result = mysql_query($order);  //order executes
if($result){
    echo("<br>Thank you for submitting!");
} else{
    echo("<br>Sorry, something went wrong! Please try again!");
}
?>

SimpleImage.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/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;
   }      

}
?>

我知道我现在有很多安全漏洞,很快就会开始工作!谢谢你们!

3 个答案:

答案 0 :(得分:1)

乍一看,您的图片大小调整代码位于表单的if( isset($_POST['submit']) ) {检查范围内,但此代码永远不会运行,因为表单提交到submitAlbumForm.php完全不同的页面。我想你只需要将调整大小的代码移到submitAlbumForm.php中,可能在if(move_uploaded_file(...)块内,并根据需要更改路径。

答案 1 :(得分:0)

我没有看到if if( isset($_POST['submit']) )的if块是如何被命中的,如果是,那么图像数据将被直接输出,这是不可行的,因为它被HTML包围。输出调整大小的图像的数据的单独脚本将由单独的脚本更适当地处理。 (或许可以获取大小的GET参数?)如果您尝试保存图像的已调整大小的副本而不是原始大小的图像,那么您应该在move_uploaded_file之后执行此操作。您可以使用SimpleImage::save()来执行此操作。也许这会奏效:

if(move_uploaded_file($_FILES['albumCover']['tmp_name'], $target)) 
{ 
    require_once 'SimpleImage.php';
    $image = new SimpleImage();
    $image->load($target);
    $image->resize(150,150);
    $image->save($target); // Overwrites the image with a resized one

    // Tells you if its all ok 
    echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
} 
else ...

答案 2 :(得分:0)

你可以尝试我自己的程序。 我上传和存储数据,图像可以缩小,我们可以改变。

我使用php和xampp。 目录:

C:\xampp\htdocs\phpyan\6_Database_2
6_Database_2 :
..images (dir)
..packages (dir)
..input_personal_info.php (file)

..images
   ..small(dir)
   ..more pict (file picture)
-----------------------------
..packages
   ..ClassDatabase.php 
   ..Personal.php

在“images folder”中有一个名为“small”的文件夹

备注: ,在包文件夹中,我保持这些类的功能是存储数据和上传小尺寸的图像

input_personal_info.php

<?php
 include 'packages/ClassDatabase.php';
 include 'packages/Personal.php';
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Input Personal Information</title>
  </head>
 <body>
  <h1>Personal Information</h1>
  <form enctype="multipart/form-data" action="" name="frm_personal_info" method="post">
    <table>
     <tr>
      <td>First Name</td>
      <td><input type="text" name="First_Name"></td>
     </tr>
     <tr>
      <td>Last Name</td>
      <td><input type="text" name="Last_Name"></td>
     </tr>
     <tr>
      <td>Date Birth</td>
      <td><input type="text" name="Date_Birth"></td>
     </tr>
     <tr>
      <td>Gender</td>
      <td>
        <select name="Gender">
         <option value="">Gender...</option>
         <option value="Pria">Pria</option>
         <option value="Wanita">Wanita</option>
         <option value="Lainnya">Lain..</option>
        </select>
      </td>
     </tr>
     <tr>
      <td>Photo Profile</td>
      <td><input type="file" name="Photo_Profile"></td>
     </tr>
      <tr>
      <td>About</td>
      <td><textarea name="About" rows="4" cols="30"></textarea></td>
     </tr>
      <tr>
      <td colspan="2"><input type="submit" name="submit" value="Save"></td>
     </tr>
    </table>
  </form>
 </body>
</html>
<?php
// connect with database
$connector = new ClassDatabase("localhost","root","","RawnayDB");
$connector->connect();
 if (isset($_POST['submit'])) {
    // assign values on variabel
      $first_name = $_POST['First_Name'];
    $last_name = $_POST['Last_Name'];
    $date_birth = $_POST['Date_Birth'];
    $gender = $_POST['Gender'];
    $about = $_POST['About'];
    $dir = "images/";
    $dir2 = "images/small/";
    $photo_name = $_FILES['Photo_Profile']['name'];
    $photo_error = $_FILES['Photo_Profile']['error'];
    $photo_type = $_FILES['Photo_Profile']['type'];
    $photo_size = $_FILES['Photo_Profile']['size'];
    $photo_tmp = $_FILES['Photo_Profile']['tmp_name'];

    $personals = new Personal();

    // save file foto
    $personals->uploadPic($dir,$photo_name,$photo_tmp);
    // save pic small
    $personals->thumbPic($dir2,$photo_name);
    // save data
    $personals->savePersData($first_name,$last_name,$date_birth,$gender,$photo_name,$about);


 }
?>

包/ ClassDatabase.php

<?php
// class Database
class ClassDatabase{
  var $host;
  var $user;
  var $pswd;
  var $db;

  function ClassDatabase($host,$user,$pswd,$db){
    $this->host = $host;
    $this->user = $user;
    $this->pswd = $pswd;
    $this->db = $db;
  }

  function connect(){
  // Connection Test
    if(mysql_connect($this->host,$this->user,$this->pswd))
    {mysql_select_db($this->db);} else {echo "Connection Failed";}

  }
}
?>

packages / Personal.php //&gt;类

<?php
// class personal

class Personal{

  var $tabel = "personal";
  var $photo_original;
  var $photo_small;
  var $width;
  var $height;
  var $thumbWidth = 100;
  var $thumbHeight;

  function savePersData($fstnm,$lstnm,$dtbrth,$gndr,$photo_name,$about){
      $small = $this->photo_small;
      $original = $this->photo_original;
      $photo_name = "Pic".$fstnm;
      $query = "INSERT INTO $this->tabel VALUES('','$fstnm','$lstnm','$dtbrth','$gndr','$photo_name','$small','$original','$about');";
      if(mysql_query($query)){
        echo "<script>alert('penyimpanan sukses');</script>";
      }
  }

  function uploadPic($dir,$photo_name,$photo_tmp){
     is_uploaded_file($photo_tmp);
     $check = move_uploaded_file($photo_tmp,$dir.$photo_name);
     if($check){
     $this->photo_original=$dir.$photo_name;
     }
  }

  function thumbPic($dir2,$filename){
    $photo_original = imagecreatefromjpeg($this->photo_original);
    $this->width = imagesx($photo_original);
    $this->height = imagesy($photo_original);
    $this->thumbHeight = ($this->thumbWidth/$this->width)*$this->height;
    // resample picture
    $gbr_thumb = imagecreatetruecolor($this->thumbWidth,$this->thumbHeight);
    imagecopyresampled($gbr_thumb,$photo_original,0,0,0,0,$this->thumbWidth,$this->thumbHeight,$this->width,$this->height);
    // Save your directory
    $acak = rand(00000,999999);
    imagejpeg($gbr_thumb, $dir2."Small_Rawnay_Pic_".$acak.".jpeg");
    $this->photo_small = $dir2."Small_Rawnay_Pic_".$acak.".jpeg";
  }
}
?>