当前位置:网站首页>PHP generate Poster

PHP generate Poster

2022-07-05 13:42:00 Black hearted green rose

One 、 Method

**
 *  Generate posters 
 * @param array   Parameters , Including pictures and words 
 * @param string  $filename  Generate poster file name , If this parameter is not passed, no file will be generated , Direct output picture 
 * @return [type] [description]
 */
function createPoster($config=array(),$filename=""){
    // If there's anything wrong with reading the newspaper , You can note this first 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,       // Font size 
        'fontColor'=>'255,255,255', // The font color 
        'angle'=>0,
    );
    $background = $config['background'];// The bottom background of the poster 
    // Background method 
    $backgroundInfo = getimagesize($background);
    $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
    $background = $backgroundFun($background);
    $backgroundWidth = imagesx($background);  // Background width 
    $backgroundHeight = imagesy($background);  // Background height 
    $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
    $color = imagecolorallocate($imageRes, 0, 0, 0);
    imagefill($imageRes, 0, 0, $color);
    // imageColorTransparent($imageRes, $color);  // The color is transparent 
    imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
    // Processed pictures 
    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']){   // If it is a string image stream 
                $info = getimagesizefromstring($val['url']);
                $function = 'imagecreatefromstring';
            }
            $res = $function($val['url']);
            $resWidth = $info[0];
            $resHeight = $info[1];
            // Create Sketchpad  , Zoom the picture to the specified size 
            $canvas=imagecreatetruecolor($val['width'], $val['height']);
            imagefill($canvas, 0, 0, $color);
            // The key function , Parameters ( Target resources , Source , The starting coordinate of the target resource x,y,  The starting coordinate of the source resource x,y, The width and height of the target resource w,h, The width and height of the source resource 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'];
            // Place image 
            imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);// Left , On , Right , Next , Width , Height , transparency 
        }
    }
    // Working with text 
    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']);
        }
    }
    // Generate pictures 
    if(!empty($filename)){
        $res = imagejpeg ($imageRes,$filename,90); // Save to local 
        imagedestroy($imageRes);
        if(!$res) return false;
        return $filename;
    }else{
        imagejpeg ($imageRes);     // Show... On the browser 
        imagedestroy($imageRes);
    }
}

Two 、 Usage method

1. Generate a picture with QR code

$config = array(
    'image'=>array(
        array(
            'url'=>'qrcode/qrcode.png',     // QR code resources 
            'stream'=>0,
            'left'=>116,
            'top'=>-216,
            'right'=>0,
            'bottom'=>0,
            'width'=>178,
            'height'=>178,
            'opacity'=>100
        )
    ),
    'background'=>'bg/bg1.jpg'          // Background map 
);
$filename = 'bg/'.time().'.jpg';
//echo createPoster($config,$filename);
echo createPoster($config);

2. Generate multi content posters

$config = array(
    'text'=>array(
        array(
            'text'=>' nickname ',
            'left'=>182,
            'top'=>105,
            'fontPath'=>'qrcode/simhei.ttf',     // The font file 
            'fontSize'=>18,             // Font size 
            'fontColor'=>'255,0,0',       // The font color 
            'angle'=>0,
        )
    ),
    'image'=>array(
        array(
            'url'=>'qrcode/qrcode.png',       // Image resource path 
            'left'=>130,
            'top'=>-140,
            'stream'=>0,             // Whether the picture resource is a string image stream 
            'right'=>0,
            'bottom'=>0,
            'width'=>150,
            'height'=>150,
            'opacity'=>100
        ),
        array(
            'url'=>'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0',
            'left'=>120,
            'top'=>70,
            'right'=>0,
            'stream'=>0,
            'bottom'=>0,
            'width'=>55,
            'height'=>55,
            'opacity'=>100
        ),
    ),
    'background'=>'qrcode/bjim.jpg',
);
$filename = 'qrcode/'.time().'.jpg';
//echo createPoster($config,$filename);
echo createPoster($config);

原网站

版权声明
本文为[Black hearted green rose]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140521277719.html