首页 > 编程 > PHP > 正文

php调整图片大小的image resize函数详解

2020-03-22 18:39:37
字体:
来源:转载
供稿:网友
我用过一些php实现的图片大小调整(image resize)函数,但是都不是很完美,有的图片在调整之后完全变形,还有的无缘无故多了一些线条,有的在颜色亮度上也差强人意。今天我重新找了下,又有了一些收获。

if(isset($_FILES['manager_photo']) && !empty($_FILES['manager_photo']['name']))    {        $photo_name=$manager_name."-".$_FILES["manager_photo"]["name"];        $tmpname = $_FILES['manager_photo']['tmp_name'];        $file_ext= substr($photo_name, strripos($photo_name, '.'));           $dir = "./manager_photos/";        // finally resize        @img_resize( $tmpname , 90 ,  $dir , $photo_name, 1);}function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 )    {    $save_dir     .= ( substr($save_dir,-1) != "/") ? "/" : "";    $gis        = getimagesize($tmpname);    $type        = $gis[2];    switch($type)        {        case "1": $imorig = imagecreatefromgif($tmpname); break;        case "2": $imorig = imagecreatefromjpeg($tmpname);break;        case "3": $imorig = imagecreatefrompng($tmpname); break;        default:  $imorig = imagecreatefromjpeg($tmpname);        }        $x = imagesx($imorig);        $y = imagesy($imorig);        $woh = (!$maxisheight)? $gis[0] : $gis[1] ;         if($woh <= $size)        {        $aw = $x;        $ah = $y;        }            else        {            if(!$maxisheight){                $aw = $size;                $ah = $size * $y / $x;            } else {                $aw = $size * $x / $y;                $ah = $size;            }        }        $im = imagecreatetruecolor($aw,$ah);    if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y))        if (imagejpeg($im, $save_dir.$save_name))            return true;            else            return false;}//img_resize

用ImageMagick来实现

有人提到用ImageMagick来实现,它里面有很多选项,我们可以用很少的代码就能实现图片调整。值得研究下。

 $image = new Imagick($src); $image->resizeImage($width,$height,Imagick::FILTER_LANCZOS,1); $image->cropImage($width_2, $height_2, $x, $y); $image->setCompression(Imagick::COMPRESSION_JPEG); $image->setImageCompressionQuality(82); $image->writeImage($dest); $image->destroy();

用php_html' target='_blank'>class_upload实现

如果如上介绍不适合你,你不单能图片上传和图片调整,还可以切、割、加水印、旋转、翻转等等。

其他实现代码参考

此代码可以返回图片以及正确的名称,但是只能是黑色的?

function resize($originalImage){list($width, $height) = getimagesize($originalImage);$newName=basename($originalImage);$imageResized = imagecreatetruecolor(128, 128);$imageTmp = imagecreatefromjpeg($originalImage);imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, 128, 128, $width, $height);imagejpeg($imageResized, "resizedImg/$newName",100);imageDestroy($imageResized);}

代码改善后,看看如下代码,可以设置颜色。

function resizeImage($file){        define ('MAX_WIDTH', 1500);//max image width                      define ('MAX_HEIGHT', 1500);//max image height        define ('MAX_FILE_SIZE', 10485760);        //iamge save path        $path = 'storeResize/';         //size of the resize image        $new_width = 128;        $new_height = 128;           //name of the new image                  $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']);             $image_type = $file['type'];        $image_size = $file['size'];        $image_error = $file['error'];        $image_file = $file['tmp_name'];        $image_name = $file['name'];               $image_info = getimagesize($image_file);        //check image type        if ($image_info['mime'] == 'image/jpeg' or $image_info['mime'] == 'image/jpg'){           }        else if ($image_info['mime'] == 'image/png'){           }        else if ($image_info['mime'] == 'image/gif'){           }        else{                       //set error invalid file type        }        if ($image_error){            //set error image upload error        }        if ( $image_size > MAX_FILE_SIZE ){            //set error image size invalid        }        switch ($image_info['mime']) {            case 'image/jpg': //This isn't a valid mime type so we should probably remove it            case 'image/jpeg':            $image = imagecreatefromjpeg ($image_file);            break;            case 'image/png':            $image = imagecreatefrompng ($image_file);            break;            case 'image/gif':            $image = imagecreatefromgif ($image_file);            break;        }           if ($new_width == 0 && $new_height == 0) {            $new_width = 100;            $new_height = 100;        }        // ensure size limits can not be abused        $new_width = min ($new_width, MAX_WIDTH);        $new_height = min ($new_height, MAX_HEIGHT);        //get original image h/w        $width = imagesx ($image);        $height = imagesy ($image);        //$align = 'b';        $zoom_crop = 1;        $origin_x = 0;        $origin_y = 0;        //TODO setting Memory        // generate new w/h if not provided        if ($new_width && !$new_height) {            $new_height = floor ($height * ($new_width / $width));        } else if ($new_height && !$new_width) {            $new_width = floor ($width * ($new_height / $height));        }        // scale down and add borders        if ($zoom_crop == 3) {         $final_height = $height * ($new_width / $width);         if ($final_height > $new_height) {            $new_width = $width * ($new_height / $height);         } else {            $new_height = $final_height;         }        }        // create a new true color image        $canvas = imagecreatetruecolor ($new_width, $new_height);        imagealphablending ($canvas, false);        if (strlen ($canvas_color) < 6) {            $canvas_color = 'ffffff';              }        $canvas_color_R = hexdec (substr ($canvas_color, 0, 2));        $canvas_color_G = hexdec (substr ($canvas_color, 2, 2));        $canvas_color_B = hexdec (substr ($canvas_color, 2, 2));        // Create a new transparent color for image        $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G,$canvas_color_B, 127);        // Completely fill the background of the new image with allocated color.        imagefill ($canvas, 0, 0, $color);        // scale down and add borders        if ($zoom_crop == 2) {            $final_height = $height * ($new_width / $width);          if ($final_height > $new_height) {            $origin_x = $new_width / 2;            $new_width = $width * ($new_height / $height);            $origin_x = round ($origin_x - ($new_width / 2));            } else {            $origin_y = $new_height / 2;            $new_height = $final_height;            $origin_y = round ($origin_y - ($new_height / 2));          }        }        // Restore transparency blending        imagesavealpha ($canvas, true);        if ($zoom_crop > 0) {            $src_x = $src_y = 0;            $src_w = $width;            $src_h = $height;            $cmp_x = $width / $new_width;            $cmp_y = $height / $new_height;            // calculate x or y coordinate and width or height of source            if ($cmp_x > $cmp_y) {        $src_w = round ($width / $cmp_x * $cmp_y);        $src_x = round (($width - ($width / $cmp_x * $cmp_y)) / 2);            } else if ($cmp_y > $cmp_x) {        $src_h = round ($height / $cmp_y * $cmp_x);        $src_y = round (($height - ($height / $cmp_y * $cmp_x)) / 2);            }            // positional cropping!        if ($align) {            if (strpos ($align, 't') !== false) {                $src_y = 0;            }                        if (strpos ($align, 'b') !== false) {                                $src_y = $height - $src_h;                        }                        if (strpos ($align, 'l') !== false) {                $src_x = 0;            }            if (strpos ($align, 'r') !== false) {                $src_x = $width - $src_w;            }        }            // positional cropping!            imagecopyresampled ($canvas, $image, $origin_x, $origin_y, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h);         } else {              imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);    }        //Straight from Wordpress core code. Reduces filesize by up to 70% for PNG's        if ( (IMAGETYPE_PNG == $image_info[2] || IMAGETYPE_GIF == $image_info[2]) && function_exists('imageistruecolor') && !imageistruecolor( $image ) && imagecolortransparent( $image ) > 0 ){            imagetruecolortopalette( $canvas, false, imagecolorstotal( $image ) );    }        $quality = 100;                   $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']);          if (preg_match('/^image//(?:jpg|jpeg)$/i', $image_info['mime'])){                              imagejpeg($canvas, $path.$nameOfFile, $quality);     } else if (preg_match('/^image//png$/i', $image_info['mime'])){                                imagepng($canvas, $path.$nameOfFile, floor($quality * 0.09));    } else if (preg_match('/^image//gif$/i', $image_info['mime'])){                      imagegif($canvas, $path.$nameOfFile);    }}

以上就是php调整图片大小的image resize函数详解的详细内容,更多请关注 其它相关文章!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表