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

php resize函数,php调整图片大小的image resize函数详解我用过一些 php 实现的图片大小调整 imageresize 函数 但是都不是很完美 有的图片在调整之后完全变形 还有的无缘无故多了一些线条 有的在颜色亮度上也差强人意 今天我重新找了下 又有了一些收获 if isset FILES manager photo amp amp empty FILES manager photo name photo nam

我用过一些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_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’, );

//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);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223300.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:23
下一篇 2026年3月17日 下午2:24


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号