效果:
原始图片:
处理好的图片
实现过程:
/**
* 图片处理成圆形图片
* @param [string] $srcFile [图片原始路径]
* @param [string] $savePath [图片保存路径+文件名]
* @return [string] $savePath [处理好的文件存放路径]
*/
function cmf_round_img($srcFile,$savePath) {
//获取原图尺寸,并设置新图片的宽度和高度
list($w, $h) = getimagesize($srcFile);
if( $w > $h ){
$w = $h;
}else{
$h = $w;
}
$oimgSrc = imagecreatefromstring(file_get_contents($srcFile));
$oimgDst = imagecreatetruecolor($w, $h);
imagealphablending($oimgDst,false);
$transparent = imagecolorallocatealpha($oimgDst, 0, 0, 0, 127);
$r=$w/2;
for($x=0;$x<$w;$x++){
for($y=0;$y<$h;$y++){
$c = imagecolorat($oimgSrc,$x,$y);
$_x = $x - $w/2;
$_y = $y - $h/2;
if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
imagesetpixel($oimgDst,$x,$y,$c);
}else{
imagesetpixel($oimgDst,$x,$y,$transparent);
}
}
}
$data = getimagesize($srcFile);
imagesavealpha($oimgDst, true);
imagepng($oimgDst,$savePath);
imagedestroy($oimgDst);
imagedestroy($oimgSrc);
return $savePath;
}
注意:
如果图片过多或者图片太大,可能会出现以下错误:
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 17295719 bytes) in
解决方案:
1.永久性修改php内存xianzhi
php.ini文件中memory_limit设置的数字太大,可以将其改的大一点,或者直接memory_limit=-1,意为不设限。
2.运行文件内临时性修改memory_limit
ini_set("memory_limit", "-1");
ini_set("memory_limit", "3072M");