Home > Backend Development > PHP Tutorial > Page display problem after generating thumbnails

Page display problem after generating thumbnails

WBOY
Release: 2016-07-06 13:53:53
Original
969 people have browsed it

<code><?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></code>
Copy after login
Copy after login

11.jpg
Page display problem after generating thumbnails

Watermark image
Page display problem after generating thumbnails

After executing the script, the generated thumbnail is fine and saved normally
but the page displays a small border

Page display problem after generating thumbnails

Please help me, thank you

Reply content:

<code><?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></code>
Copy after login
Copy after login

11.jpg
Page display problem after generating thumbnails

Watermark image
Page display problem after generating thumbnails

After executing the script, the generated thumbnail is fine and saved normally
but the page displays a small border

Page display problem after generating thumbnails

Please help me, thank you

header("content-type:image/png"); Try deleting this paragraph?

You only generate thumbnails and do not directly display the thumbnails to the browser, but you configure the browser to output the png format and display a box, which means that the browser wants to display the image, but it does not display the correct image.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template