主页

<?php
/**

  • @param array $config
  • @param string $filename 生成的文件名,包括文件名称和扩展
  • @return bool|string
    */

function createPoster($config=[] ,$filename=""){

//如果要看报什么错,可以先注释调这个header
if(empty($filename)) header("content-type: image/png");
$imageDefault = array(
    'left'=>0,
    'top'=>0,
    'right'=>0,
    'bottom'=>0,
    'width'=>100,
    'height'=>100,
    'opacity'=>100
);
$textDefault = array(
    'text'=>'',
    'left'=>0,
    'top'=>0,
    'fontSize'=>32, //字号
    'fontColor'=>'255,255,255', //字体颜色
    'angle'=>0,
);
$background = $config['background'];//海报最底层得背景
//背景方法
$backgroundInfo = getimagesize($background);
$backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
$background = $backgroundFun($background);
$backgroundWidth = imagesx($background); //背景宽度
$backgroundHeight = imagesy($background); //背景高度
$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
$color = imagecolorallocate($imageRes, 0, 0, 0);
imagefill($imageRes, 0, 0, $color);
// imageColorTransparent($imageRes, $color); //颜色透明
imagefilledrectangle($imageRes, 0, 0, 399, 29, $color);
imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
//处理了图片
if(!empty($config['image'])){
    foreach ($config['image'] as $key => $val) {
        $val = array_merge($imageDefault,$val);
        $info = getimagesize($val['url']);
        $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
        if($val['stream']){ //如果传的是字符串图像流
            $info = getimagesizefromstring($val['url']);
            $function = 'imagecreatefromstring';
        }
        $res = $function($val['url']);
        $resWidth = $info[0];
        $resHeight = $info[1];
        //建立画板 ,缩放图片至指定尺寸
        $canvas=imagecreatetruecolor($val['width'], $val['height']);
        imagefill($canvas, 0, 0, $color);
        //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
        imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
        $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
        $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
        //放置图像
        imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
    }
}
//处理文字
if(!empty($config['text'])){
    foreach ($config['text'] as $key => $val) {
        $val = array_merge($textDefault,$val);
        list($R,$G,$B) = explode(',', $val['fontColor']);
        $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
        $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
        $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];
        imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
    }
}
//生成图片
if(!empty($filename)){
    $res = imagejpeg ($imageRes,$filename,90); //保存到本地
    imagedestroy($imageRes);
    if(!$res) return false;
    return $filename;
}else{
    imagejpeg ($imageRes); //在浏览器上显示
    imagedestroy($imageRes);
}

}

//调用方法
//调用方法
$config = [

'image'=>[
   [
        'url'=>'WechatIMG392.jpeg',     //二维码资源
        'stream'=>0,
        'left'=>100,
        'top'=>268,
        'right'=>0,
        'bottom'=>0,
        'width'=>178,
        'height'=>178,
        'opacity'=>100
    ]
],
'background'=>'back.jpeg',          //背景图,
'text' =>[
    [
        'text'=>$text,
        'left'=>162,
        'top'=>460,
        'fontPath'=>$font,     //字体文件
        'fontSize'=>$fontSize,             //字号
        'fontColor'=>$color,       //字体颜色
        'angle'=>0,
    ],
    [
        'text'=>$text2,
        'left'=>162,
        'top'=>590,
        'fontPath'=>$font,     //字体文件
        'fontSize'=>$fontSize,             //字号
        'fontColor'=>$color,       //字体颜色
        'angle'=>0,
    ],
]

];

$filename = date("Ymd").'.jpg';
createPoster($config,$filename);//直接生成图片
//createPoster($config);//浏览器直接预览

版权属于:三分快乐,七纷幸福
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
0
查看目录

目录

来自 《php生成海报》
评论

三分快乐,七纷幸福
99 文章数
7 评论量
11 分类数
102 页面数
已在风雨中度过 2年199天23小时57分