检索图像并将其加载到html页面中

时间:2009-10-05 09:29:29

标签: php javascript mysql

我正在使用php和ajax。我能够从数据库中检索图像,但我希望以100px x 100px大小显示图像,但它只是检索原始图像大小并破坏了我所做的对齐工作。

如何修复检索到的图像的宽度和高度。我使用以下代码从数据库中恢复

$query = "select bin_data from imageupload where Id=1;";
$result = mysql_query($query, $con);
$result_data = mysql_fetch_array($result, MYSQL_ASSOC);
header("Content-type: image/jpeg") ;
echo $result_data['bin_data'];

3 个答案:

答案 0 :(得分:1)

这些是此代码执行的步骤

  1. 复制源图像
  2. 计算图像尺寸
  3. 调整图像大小(指定最大高度/宽度)
  4. 保留宽高比
  5. 写入目标图像
  6. 这是从各种代码段创建的 我在php.net和网络上的其他地方找到了这个 除了以外的任何代码,我都不会赞成 把碎片放在一起。 http://www.php.net/manual/en/function.getimagesize.php

        <?php
    
    $source_pic = 'images/source.jpg';
    $destination_pic = 'images/destination.jpg';
    $max_width = 500;
    $max_height = 500;
    
    $src = imagecreatefromjpeg($source_pic);
    list($width,$height)=getimagesize($source_pic);
    
    $x_ratio = $max_width / $width;
    $y_ratio = $max_height / $height;
    
    if( ($width <= $max_width) && ($height <= $max_height) ){
        $tn_width = $width;
        $tn_height = $height;
        }elseif (($x_ratio * $height) < $max_height){
            $tn_height = ceil($x_ratio * $height);
            $tn_width = $max_width;
        }else{
            $tn_width = ceil($y_ratio * $width);
            $tn_height = $max_height;
    }
    
    $tmp=imagecreatetruecolor($tn_width,$tn_height);
    imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
    
    imagejpeg($tmp,$destination_pic,100);
    imagedestroy($src);
    imagedestroy($tmp);
    
    ?>
    

答案 1 :(得分:1)

如果带宽不是问题,则调整图像大小对服务器来说是CPU密集型的:

<img src="theimage.jpg" style="width:100px; height:100px;" />

现代浏览器过滤图像,使其在调整大小时看起来很好。

要保持纵横比和裁剪,请执行以下操作:

<div style="width:100px; height:100px; overflow:hidden; display:inline-block;">
  <img src="theimage.jpg" style="width:100px;" />
</div>

还可以考虑使用Pasta的答案加上图像缓存。每张照片仅调整一次,而不会丢失原件。

答案 2 :(得分:0)

您可以使用PHP的gd模块执行此操作。请参阅imagecopyresampled函数及其文档中的示例。

请注意,这是一项昂贵的操作,因此您应该在上传图像时保存已调整大小的图像,或者缓存结果。