php - 生成缩略图之后的页面显示问题

查看:139
本文介绍了php - 生成缩略图之后的页面显示问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<?php
header("content-type:text/html;charset=utf-8");

class Thumb{
    // 水印图片路径 - 100*130
    private $watermark;
    // 生成缩略图的路径
    public $thumbPath="./";
    public function __construct(){
        $this->watermark="./logo.jpg";
    }
    // $imageInfo是上传图片后返回的信息
    // $type - 1代表生成商品或文章的缩略图,2代表生成头像缩略图
    public function makeThumb($imageInfo,$with=360,$height=360,$type=1){
        if($imageInfo['type']==".jpg"){
            $src_image=imagecreatefromjpeg($imageInfo['source_img_path']);
        }else if($imageInfo['type']==".png"){
            $src_image=imagecreatefrompng($imageInfo['source_img_path']);
        }else if($imageInfo['type']==".gif"){
            $src_image=imagecreatefromgif($imageInfo['source_img_path']);
        }
        $image=imagecreatetruecolor($with,$height);
        $white=imagecolorallocate($image,255,255,255);
        // 将背景设为透明
        imagecolortransparent($image,$white);
        imagefill($image,0,0,$white);
        // 开始判断最终生成的缩略图尺寸,避免变形
        $finalWidth=$with;
        $finalHeight=$height;
        $x=$y=0;
        if($imageInfo['width']<$with && $imageInfo['height']<$height){
            // 这种情况,不拉伸源图,将源图放置在缩略图正中间
            $finalWidth=$imageInfo['width'];
            $finalHeight=$imageInfo['height'];
            $x=round(($width-$finalWidth)/2);
            $y=round(($height-$finalHeight)/2);
        }else if($imageInfo['width']>$imageInfo['height']){
            // 确定缩放比例
            $scale=round($finalWidth/$imageInfo['width'],2);
            $finalHeight=round($scale*$imageInfo['height']);
            $y=round(($height-$finalHeight)/2);
        }else if($imageInfo['width']<$imageInfo['height']){
            $scale=round($finalHeight/$imageInfo['height'],2);
            $finalWidth=round($scale*$imageInfo['height']);
            $x=round(($width-$finalWidth)/2);
        }else if($imageInfo['width']==$imageInfo['height']){
            if($with>$height){
                $scale=round($finalHeight/$imageInfo['height'],2);
                $finalWidth=round($scale*$imageInfo['width']);
                $x=round(($with-$finalWidth)/2);
            }else if($with<$height){
                $scale=round($finalWidth/$imageInfo['width'],2);
                $finalHeight=round($scale*$imageInfo['height']);
                $y=round(($height-$finalHeight)/2);
            }
        }
        imagecopyresampled($image,$src_image,$x,$y,0,0,$finalWidth,$finalHeight,$imageInfo['width'],$imageInfo['height']);
        // 增加水印
        if($finalWidth>=200 && $finalHeight>=260){
            $watermark=imagecreatefromjpeg($this->watermark);
            imagecopymerge($image,$watermark,$finalWidth-100,$finalHeight-130,0,0,100,130,80);
            imagedestroy($watermark);
        }
        
        !is_dir($this->thumbPath) && mkdir($this->thumbPath);
        // 保存路径+名字
        $this->thumbPath=$this->thumbPath."/".time().mt_rand()."_{$finalWidth}_{$finalHeight}.png";
        // 最后统一生成png格式,清晰度较高
        header("content-type:image/png");
        imagepng($image,$this->thumbPath);
        imagedestroy($image);
        imagedestroy($src_image);
    }
}

if($_FILES){
    $a=new Thumb();
    // 实际图片信息是上传处理过的信息,这里写成了固定的
    $a->makeThumb(array('width'=>430,'height'=>430,'type'=>'.jpg','source_img_path'=>'./11.jpg'));
}

?>
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="thumb">
    <p></p>
    <input type="submit" name="" value="上 传"  />
    <input type="reset" name="" value="重 置" />
</form>

11.jpg

水印图

执行该脚本之后,生成的缩略图没问题,正常保存
但是页面却显示小边框

求解,谢谢诸位

这个问题已被关闭,原因:智商堪忧啊,生成缩略图的页面本来就不能输出信息,实际项目中一直找不到原因,结果是sql调试时输出的信息忘记注释了

解决方案

header("content-type:image/png"); 把这一段删除试试?

你只是生成缩略图并不直接把缩略图显示给浏览器,却配置了浏览器输出为png格式,显示个方块,就是浏览器要显示图片,但是却没有正确的图片显示。

这篇关于php - 生成缩略图之后的页面显示问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆