如何在php上调整图像文件的大小?

时间:2012-02-25 22:42:00

标签: php image

我有一个图像文件,它作为blob存储在数据库中(显示在代码中)。一旦调整为80 * 80(缩略图),我需要将其存储到其他数据库中。我已经调整大小并将其保存为文件但我无法将调整大小的图像存储到数据库中。我怎样才能做到这一点?

//resize image and save
include('MyImage.php');
$image = new MyImage();
$image->load($tmpName);
$image->resize(80,80);
$image->save('thumbnail.jpg');


//storing original image onto database
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
 $fileName = $_FILES['userfile']['name'];
 $tmpName  = $_FILES['userfile']['tmp_name'];
 $fileSize = $_FILES['userfile']['size'];
 $fileType = $_FILES['userfile']['type'];

 $fp      = fopen($tmpName, 'r');
 $content = fread($fp, filesize($tmpName));
 $content = addslashes($content);
 fclose($fp);

 if(!get_magic_quotes_gpc())
  {
    $fileName = addslashes($fileName);
  }

 $query = "INSERT INTO image_tbl (name, size, type, content )".
           "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
 mysql_query($query) or die('Error, query failed'); 
} 

3 个答案:

答案 0 :(得分:2)

答案的直接问题是

//This goes after the frist block, after "$image->save('thumbnail.jpg');"

$fileSize=filesize('thumbnail.jpg')
$fp      = fopen('thumbnail.jpg', 'rb');
$content = fread($fp, $fileSize);
$content = addslashes($content);
fclose($fp);

$query = "INSERT INTO image_tbl (name, size, type, content )".
           "VALUES ('thumbnail.jpg', '$fileSize', 'image/jpeg', '$content')";
mysql_query($query) or die('Error, query failed'); 

您可能会认识到该代码的一些元素: - )

但请相信我,你不要这样:

  • 在数据库中存储BLOB,数据库不理解是一个坏主意
  • 使用字符串和addslashes来实现它,非常接近最坏的情况:你将图像读成一个由大约50%的unprintables组成的字符串,反斜杠,将它传输到数据库,在那里进行无反向和解析。使用带参数的预准备语句(如果您确实要将图像保存在数据库中)

答案 1 :(得分:0)

试试这个:

$file = $path_you_saved_image."/".$your_image_name;
$handle = fopen( $file , "rb" );
$img = fread($handle , filesize($file) );
$img = base64_encode($img);
$query = "insert into images (image) values ('$img')";
mysql_query($query) or die(mysql_error());

答案 2 :(得分:0)

您的代码表明您已保存已调整大小的图像。现在打开这个已调整大小的图像'thumbnail.jpg'并对其进行处理,编码并保存。