<?php
//生成圈形透明的png图片
function yuanImg( $picture ) 
{
    $src_img = imagecreatefromstring(file_get_contents($picture));
    $w = imagesx($src_img);
    $h = imagesy($src_img);
    $w = min($w, $h);
    $h = $w;
    $img = imagecreatetruecolor($w, $h);
    imagesavealpha($img, true);//这一句一定要有
    $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);//拾取一个完全透明的颜色,最后一个参数127为全透明
    imagefill($img, 0, 0, $bg);
    $r = $w / 2; //圆半径
    $y_x = $r; //圆心X坐标
    $y_y = $r; //圆心Y坐标
    for ($x = 0; $x < $w; $x++) {
        for ($y = 0; $y < $h; $y++) {
            $rgbColor = imagecolorat($src_img, $x, $y);
            if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
                imagesetpixel($img, $x, $y, $rgbColor);
            }
        }
    }
    /**
     * 如果想要直接输出图片,应该先设header。header("Content-Type: image/png; charset=utf-8");
     * 并且去掉缓存区函数
     */
    //获取输出缓存,否则imagepng会把图片输出到浏览器
    ob_start();
    imagepng($img);
    imagedestroy($img);
    $contents = ob_get_contents();
    ob_end_clean();
    
    return $contents;//返回png图片数据流
}

$file = yuanImg( "./00.jpg" );

file_put_contents( "./000.png", $file );

点赞(1)
发表
评论
返回
顶部