分享好友 教程首页 教程搜索 频道列表

php原生图片合成和文字生成图片

2022-08-28 00:108270
+关注2
核心提示:请用代码测试

之前有一个我写的帖子是可以拿到远程地址的图片保存本地的
前段时间搞的很火的朋友圈标签,可以使用下面仅仅三个自定义函数即可合成,具体参数石头已经给大家写出,有需要改进的地方请直接留言!

function image_copy_image($bg_image, $sub_image, $add_x, $add_y, $add_w, $add_h, $out_image) {
    if ($sub_image) {
        $bg_image_c = imagecreatefromstring(file_get_contents($bg_image));
        $sub_image_c = imagecreatefromstring(file_get_contents($sub_image));
        imagecopyresampled($bg_image_c, $sub_image_c, $add_x, $add_y, 0, 0, $add_w, $add_h, imagesx($sub_image_c), imagesy($sub_image_c));
        //保存到out_image
        imagejpeg($bg_image_c, $out_image, 80);
        imagedestroy($sub_image_c);
        imagedestroy($bg_image_c);
    }
}

function create_text($filename, $text, $font, $size, $width_f, $red, $grn, $blu) {
    $rot = 0; // 旋转角度
    $width = 0; //宽度
    $height = 0; //高度
    $offset_x = 0; //x偏移
    $offset_y = 0; //y偏移
    $bounds = array();
    $text = autowrap($size, 0, $font, $text, $width_f); // 自动换行处理
    
    // 确定边框高度.
    $bounds = ImageTTFBBox($size, $rot, $font, "W");
    if ($rot < 0) {
        $font_height = abs($bounds[7] - $bounds[1]);
    } else if ($rot > 0) {
        $font_height = abs($bounds[1] - $bounds[7]);
    } else {
        $font_height = abs($bounds[7] - $bounds[1]);
    }
    // 确定边框高度.
    $bounds = ImageTTFBBox($size, $rot, $font, $text);
    if ($rot < 0) {
        $width = abs($bounds[4] - $bounds[0]);
        $height = abs($bounds[3] - $bounds[7]);
        $offset_y = $font_height;
        $offset_x = 0;
    } else if ($rot > 0) {
        $width = abs($bounds[2] - $bounds[6]);
        $height = abs($bounds[1] - $bounds[5]);
        $offset_y = abs($bounds[7] - $bounds[5]) + $font_height;
        $offset_x = abs($bounds[0] - $bounds[6]);
    } else {
        $width = abs($bounds[4] - $bounds[6]);
        $height = abs($bounds[7] - $bounds[1]);
        $offset_y = $font_height;
        $offset_x = 0;
    }
    $bg = imagecreatetruecolor($width + 20, $height + 20); // 创建画布
    $color = imagecolorallocatealpha($bg, 0, 0, 0, 127); //拾取一个完全透明的颜色
    imagealphablending($bg, false); //关闭混合模式,以便透明颜色能覆盖原画布
    imagefill($bg, 0, 0, $color); //填充
    imagesavealpha($bg, true); //设置保存PNG时保留透明通道信息
    $textImg = imagecolorallocate($bg, $red, $grn, $blu); // 创建白色
    ImageTTFText($bg, $size, 0, 10, $size + 10, $textImg, $font, $text);
    imagepng($bg, $filename);
}

function autowrap($fontsize, $angle, $fontface, $string, $width) {
    $content = "";
    // 将字符串拆分成一个个单字 保存到数组 letter 中
    preg_match_all("/./u", $string, $arr);
    $letter = $arr[0];
    foreach($letter as $l) {
        $teststr = $content.
        " ".$l;
        $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
        // 判断拼接后的字符串是否超过预设的宽度
        if (($testbox[2] > $width) && ($content !== "")) {
            $content. = PHP_EOL;
        }
        $content. = $l;
    }
    return $content;
}


本文标签: #海报 #生成图片
整理员:网络转载
免责声明:凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
生成海报
您可能在找更多

WAP端h5的海报生成html轻装版

小黑 HTML教程2022-04-19

黑色科技炫酷高端大气海报

    黑色科技炫酷高端大气海报

小黑 网页素材2018-10-14

科技感几何海报banner

    科技感几何海报banner

小黑 网页素材2018-10-14

下一篇
我来说两句
抢沙发