繁体   English   中英

调整PNG大小并在PHP中转换为JPG图像

[英]Resize PNG and convert to JPG image in PHP

这是我刚刚编写的代码。 它需要对图像进行裁剪,然后创建jpg图像。 如果我给它一个jpg文件,它可以正常工作,但不适用于png(透明)图像。 它只是使空白图像带有黑色背景。

我是第一次使用GD库,那么我的错误是什么?

public function crop_thumb($file, $width=150, $height=150){

        $file_type = get_file_extension($file);
        $file_name = get_file_name($file);

        $original_image_size = getimagesize(_dir_uploads_.$file);
        $original_width = $original_image_size[0];
        $original_height = $original_image_size[1];

        if($file_type == 'jpg'){
            $original_image_gd = imagecreatefromjpeg(_dir_uploads_.$file);
        }elseif($file_type == 'gif'){
            $original_image_gd = imagecreatefromgif(_dir_uploads_.$file);
        }elseif($file_type == 'png'){
            $original_image_gd = imagecreatefrompng(_dir_uploads_.$file);
        }

        $cropped_image_gd = imagecreatetruecolor($width, $height);

        $wm = $original_width / $width;
        $hm = $original_height / $height;

        $h_height = $height / 2;
        $w_height = $width / 2;

        if($original_width > $original_height ){

            $adjusted_width = $original_width / $hm;
            $half_width = $adjusted_width / 2;
            $int_width = $half_width - $w_height;

            imagecopyresampled($cropped_image_gd ,$original_image_gd ,-$int_width,0,0,0, $adjusted_width, $height, $original_width , $original_height );

        }elseif( ($original_width < $original_height) || ($original_width == $original_height) ){

            $adjusted_height = $original_height / $wm;
            $half_height = $adjusted_height / 2;
            $int_height = $half_height - $h_height;

            imagecopyresampled($cropped_image_gd , $original_image_gd ,0,-$int_height,0,0, $width, $adjusted_height, $original_width , $original_height );

        }else{

            imagecopyresampled($cropped_image_gd , $original_image_gd ,0,0,0,0, $width, $height, $original_width , $original_height );

        }

        $create = imagejpeg($cropped_image_gd, _dir_uploads_.$file_name."-".$width."x".$height.".jpg");

        return ( $create ) ? true : false;

    }

我相信使用imagecreatetruecolor创建图像后,需要使用imagesavealpha()保存Alpha通道。

$cropped_image_gd = imagecreatetruecolor($width, $height);
imagealphablending($cropped_image_gd, false);
imagesavelalpha($cropped_image_gd, true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM