您的位置:首页 > 编程语言 > PHP开发

PHP获取远程图片并调整图像大小

2015-06-09 16:56 856 查看
<?php

/**

*

*函数:调整图片尺寸或生成缩略图

*修改:2013-2-15

*返回:True/False

*参数:

* $Image 需要调整的图片(含路径)

* $Dw=450 调整时最大宽度;缩略图时的绝对宽度

* $Dh=450 调整时最大高度;缩略图时的绝对高度

* $Type=1 1,调整尺寸; 2,生成缩略图

*/

$phtypes=array('img/gif', 'img/jpg', 'img/jpeg', 'img/bmp', 'img/pjpeg', 'img/x-png');

function compressImg($Image,$Dw,$Dh,$Type){

echo $Image;

IF(!file_exists($Image)){

echo "不存在图片";

return false;

}

echo "存在图片";

// 如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值(生成缩略图操作)

// 当Type==1的时候,将不拷贝原图像文件,而是在原来的图像文件上重新生成缩小后的图像(调整尺寸操作)

IF($Type!=1){

copy($Image,str_replace(".","_x.",$Image));

$Image=str_replace(".","_x.",$Image);

}

// 取得文件的类型,根据不同的类型建立不同的对象

$ImgInfo=getimagesize($Image);

Switch($ImgInfo[2]){

case 1:

$Img =@imagecreatefromgif($Image);

break;

case 2:

$Img =@imagecreatefromjpeg($Image);

Break;

case 3:

$Img =@imagecreatefrompng($Image);

break;

}

// 如果对象没有创建成功,则说明非图片文件

IF(Empty($Img)){

// 如果是生成缩略图的时候出错,则需要删掉已经复制的文件

IF($Type!=1){

unlink($Image);

}

return false;

}

// 如果是执行调整尺寸操作则

IF($Type==1){

$w=ImagesX($Img);

$h=ImagesY($Img);

$width = $w;

$height = $h;

IF($width>$Dw){

$Par=$Dw/$width;

$width=$Dw;

$height=$height*$Par;

IF($height>$Dh){

$Par=$Dh/$height;

$height=$Dh;

$width=$width*$Par;

}

} ElseIF($height>$Dh) {

$Par=$Dh/$height;

$height=$Dh;

$width=$width*$Par;

IF($width>$Dw){

$Par=$Dw/$width;

$width=$Dw;

$height=$height*$Par;

}

} Else {

$width=$width;

$height=$height;

}

$nImg =ImageCreateTrueColor($width,$height);// 新建一个真彩色画布

ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);// 重采样拷贝部分图像并调整大小

ImageJpeg($nImg,$Image);// 以JPEG格式将图像输出到浏览器或文件

return true;

} Else {// 如果是执行生成缩略图操作则

$w=ImagesX($Img);

$h=ImagesY($Img);

$width = $w;

$height = $h;

$nImg =ImageCreateTrueColor($Dw,$Dh);

IF($h/$w>$Dh/$Dw){// 高比较大

$width=$Dw;

$height=$h*$Dw/$w;

$IntNH=$height-$Dh;

ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);

} Else {// 宽比较大

$height=$Dh;

$width=$w*$Dh/$h;

$IntNW=$width-$Dw;

ImageCopyReSampled($nImg, $Img,-$IntNW/1.8,0,0,0, $width, $Dh, $w, $h);

}

ImageJpeg($nImg,$Image);

return true;

}

};

?>

<?php

//网络图片路径

$imgPath = 'http://www.lesohome.com/phone/compress-img/251139474ba926db3d7850.jpg';

//$imgPath = "http://www.lesohome.com/userfiles/image/20111125/251139474ba926db3d7850.jpg";

$tempPath = str_replace('http://www.lesohome.com/', '', $imgPath);//替换换行字符

$name = strrchr($tempPath, "/");

$path = str_replace($name, '', $tempPath);//替换换行字符

/**

*根据路径path建立多级目录

*$dir目标目录 $mode权限,0700表示最高权限

*/

function makedir( $dir , $mode = "0700" ) {

if(strpos($dir , "/" )){

$dir_path = "" ;

$dir_info = explode("/" , $dir );

foreach($dir_info as $key => $value){

$dir_path .= $value ;

if (!file_exists($dir_path)){

@mkdir($dir_path, $mode) or die ("建立文件夹时失败了" );

@chmod($dir_path, $mode);

} else {

$dir_path .= "/" ;

continue ;

}

$dir_path .= "/" ;

}

return $dir_path ;

} else {

@mkdir($dir, $mode) or die( "建立失败了,请检查权限" );

@chmod($dir, $mode);

return $dir ;

}

} //end makedir

makedir($path);

/**

*根据url获取服务器上的图片

*$url服务器上图片路径 $filename文件名

*/

function GrabImage($url,$filename="") {

if($url=="") return false;

if($filename=="") {

$ext=strrchr($url,".");

if($ext!=".gif" && $ext!=".jpg" && $ext!=".png")

return false;

$filename=date("YmdHis").$ext;

}

ob_start();

readfile($url);

$img = ob_get_contents();

ob_end_clean();

$size = strlen($img);

$fp2=@fopen($filename, "a");

fwrite($fp2,$img);

fclose($fp2);

return $filename;

}

?>

<html>

<body>

允许上传的文件类型为:<?=implode(', ',$phtypes)?><br/>

<input type="button" id="getImg" name="getImg" size="10" value="获取图片并保存" onclick="alert('12333');" />

<?php

echo $path."<br>";

/**/

$bigImg=GrabImage($imgPath, $tempPath);

if($bigImg){

echo '<img src="'.$bigImg.'"><br>';

} else {

echo "false";

}

compressImg($bigImg,100,80,1);

?>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: