php - 从 mysql 存储的图像创建缩略图

标签 php mysql image image-processing gd

我有一个名为 users 的表,每一行(用户)都有一张图片。

使用以下代码将图像作为 BLOB 存储在 mysql 数据库中:

$filename = $_FILES['image']['tmp_name'];
$size = getimagesize($filename);
$handle = fopen( $filename , "rb" );
$content = fread( $handle , filesize( $filename ) );
fclose( $handle );
unlink($filename);
$image = base64_encode( $content );
//  .... send query to database ....

这起初有效,但随着越来越多的图像必须在每个页面上显示,它真的加载了,所以现在我想创建缩略图,使用 php GD 保存在服务器的文件系统中。

我有以下代码,但我不知道如何从数据库中读取图像以便创建缩略图。

$query = "SELECT * FROM users;";
$result = mysql_query( $query );
while( $row = mysql_fetch_array( $result ) ) {
    $uploaded_image = base64_decode( $row['image'] );
    $size = getimagesize($uploaded_image);  <--------------------
    $dimension_x = 73;
    $dimension_y = 73;
    $directory = 'views/images/generated/people/';
    do{
    $filename = random_32();
    $filename = $directory.$filename.'.jpg';    
    } while( file_exists($filename) );
$image = imagecreatefromjpeg( $uploaded_image );
$thumb = imagecreatetruecolor( $dimension_x , $dimension_y );
$size = getimagesize( $uploaded_image );
imagecopyresampled( $thumb , $image , 0 , 0 , 0 , 0 , $dimension_x , $dimension_y , $size['0'], $size['1']);
imagejpeg( $thumb , $filename , 100);
}

我正在尝试找到我应该在箭头所在的位置放置什么以使脚本工作。

它现在所做的就是输出

Warning: getimagesize(ÿØÿà): failed to open stream: No such file or directory in /var/www/play/ns4/models/create_thumbs_people.php on line 12

对于数据库中的每个条目。

---- 编辑----

忘了说,random_32() 是一个函数,它生成一个 32 个字符长的随机字符串,以便为图像命名。

最佳答案

这就是为什么将文件存储在数据库中不是一个好主意的众多原因之一......

getimagesize() 适用于文件,不适用于字符串。由于您在字符串中获得了原始图像,因此使用 imagecreatefromstring() ,然后是 imagesx() 和 imagesy() 函数来获取尺寸:

while( $row = mysql_fetch_array( $result ) ) {
    $uploaded_image = base64_decode( $row['image'] );
    $image = imagecreatefromstring( $uploaded_image );
    $uploaded_x = imagesx($image); // X dimension
    $uploaded_y = imagesy($image); // Y dimension
    etc....

请注意,imagecreatefromstring 实际上有一点聪明,可以找出图像的类型,这与相当愚蠢的 createfromgif/jpg/png/etc... 函数不同,后者仅适用于那些特定的文件类型。

关于php - 从 mysql 存储的图像创建缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050285/

相关文章:

php - 使用 PHP 和 MYSQL 预先完成 HTML 表单

mysql - 在 SSIS 中无法看到 "Microsoft OLE DB Provider for ODBC"驱动程序

css - 使用 rails 设置背景图像 css

PHP:变量的双引号内的 if 或 foreach 语句

php - 单元测试 Laravel 的 FormRequest

javascript - 客户端服务器从自己的域返回 json 时没有 'Access-Control-Allow-Origin'

MySQL 更新不更新任何行

image - ReactJS 中的图像着色

javascript - 模糊背景图像,但保持图像聚焦收件箱区域

php - 获取未定义的连接值