2012-08-03 110 views
0

我想调整一个图像上传到我的PHP窗体上。图片正在保存,但没有调整大小。基本上,除了图像部分的大小调整以外,一切工作都很好。我把我的代码放在下面。php图片调整大小不能在图像上传

HTML表单与PHP重新上浆

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

} 
?> 

我知道我现在有很多安全漏洞,并将工作在那些很快!多谢你们!

+0

所以..您是希望我们阅读所有?在哪里_exactly_出错了?这会更有帮助;) – Bono 2012-08-03 17:58:46

+0

Stackoverflow不是一个调试服务。您必须提出与编程有关的具体问题,向我们展示**代码的相关**部分(而不是数百行),并且有人可以为您提供帮助。 – Jocelyn 2012-08-03 18:02:35

+0

对不起,我想我不是很清楚哈哈,除了在html表格中的php片段,一切都工作正常,它实际上并没有调整大小和保存图像,然后将其上传到我的数据库。 – user1570257 2012-08-03 18:02:54

回答

0

我不明白if(isset($_POST['submit']))这个if block是如何被击中的,如果这样做,那么图像数据将被直接输出,这是行不通的,因为它被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 ... 
+0

这样做!非常感谢你的帮助! – user1570257 2012-08-03 20:29:28

+0

太棒了!我没有检查代码,所以我很幸运。很高兴帮助。 – ghbarratt 2012-08-03 20:31:19

1

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

+0

对,就是这样。不仅如此,他还在该页面上引用了'_FILES ['albumCover'] ['name']',因此他将整个图像从请求中拉出来,即使它已被调整大小并保存在某个地方。 – ametren 2012-08-03 18:09:39

+0

非常感谢回复!肯定帮了我很多! – user1570257 2012-08-03 20:29:49

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 

“图像文件夹”有一个叫“小”

备注文件夹: 并在包文件夹我把班作为存储数据的功能,在小尺寸图像上传

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

    } 
} 
?> 

包/ Personal.php //>类

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