成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

PHP實現圖片合并的示例詳解

瀏覽:299日期:2022-06-11 08:13:35
目錄
  • 業務需求
  • 最終效果
  • 準備工作
  • 完整過程
  • 常見的問題

業務需求

我們需要一個微信小程序碼,但是是需要提供給別人掃碼的但是只有一個純粹的小程序碼是不好看的,所以需要推廣的海報圖片。再結合文字

最終效果

準備工作

1、需要海報的底圖

2、小程序碼的圖片

代碼部分結合YII2但不影響使用

完整過程

第一步:生成小程序碼圖片

第二步:縮放小程序碼的圖片大小 (如果尺寸符合海報大小可省略) 280-1280px

第三步:將縮放后的小程序圖片合成到背景圖片

第四步:合成文字信息

第一步:生成小程序碼圖片 (我使用的場景是無限制小程序碼code地址 三種自行選擇)

//微信小程序 小程序碼    public static function getWeChatSmallProgramCode($scene)    {$AccessToken = self::getAccessToken();$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $AccessToken;$postData = [    "scene" => $scene,    "page" => "pages/index/index",    "width"=>930];$postData = json_encode($postData);$contentData = self::sendPost($url, $postData);return $contentData; //如果圖片大小符合這開啟base64位圖片地址也可以完成圖片的合并合文字的合并//return self::base64UrlCode($contentData, "image/png");    }    protected static function sendPost($url, $post_data)    {$options = array(    "http" => array("method" => "POST","header" => "Content-type:application/json",//header 需要設置為 JSON"content" => $post_data,"timeout" => 60//超時時間    ));$context = stream_context_create($options);return file_get_contents($url, false, $context);    }    //二進制轉圖片image/png    public static function base64UrlCode($contents, $mime)    {$base64 = base64_encode($contents);return ("data:" . $mime . ";base64," . $base64);    }

第二步:縮放小程序碼的圖片大小

/**     * 縮放圖片尺寸     * @param $img_path string 圖片地址     * @param $new_width     * @param $new_height     * @param $new_img_path string 新的圖片地址     */    public static function picZoom($img_path,$new_width,$new_height,$new_img_path)    {//獲取尺寸list($width, $height, $img_type, $attr) = getimagesize($img_path);$imageinfo = [    "width" => $width,    "height" => $height,    "type" => image_type_to_extension($img_type, false),    "attr" => $attr];$fun = "imagecreatefrom" . $imageinfo["type"];$image = $fun($img_path);//創建新的幕布$image_thump = imagecreatetruecolor($new_width, $new_height);//復制源文件imagecopyresampled($image_thump, $image, 0, 0, 0, 0, $new_width, $new_height, $imageinfo["width"], $imageinfo["height"]);imagedestroy($image);$image = $image_thump;$func = "image" . $imageinfo["type"];$func($image, $new_img_path);    }

第三步:將縮放后的小程序圖片合成到背景圖片

/**     * 圖片合并     * 將源圖片覆蓋到目標圖片上     * @param string $dstPath 目標圖片路徑 背景圖     * @param string $srcPath 源圖片路徑   內容圖     * @param int $dstX 源圖片覆蓋到目標的X軸坐標     * @param int $dstY 源圖片覆蓋到目標的Y軸坐標     * @param int $srcX     * @param int $srcY     * @param int $pct 透明度     * @param string $filename 輸出的文件名,為空則直接在瀏覽器上輸出顯示     * @return string $filename 合并后的文件名     */    public static function picMerge($dstPath, $srcPath, $dstX = 0, $dstY = 0, $srcX = 0, $srcY = 0, $pct = 100, $filename = "")    {//創建圖片的實例$dst = imagecreatefromstring(file_get_contents($dstPath));$src = imagecreatefromstring(file_get_contents($srcPath));//獲取水印圖片的寬高list($src_w, $src_h) = getimagesize($srcPath);//將水印圖片復制到目標圖片上,最后個參數50是設置透明度,這里實現半透明效果//imagecopymerge($dst, $src, 80, 125, 0, 0, $src_w, $src_h, 100);imagecopymerge($dst, $src, $dstX, $dstY, $srcX, $srcY, $src_w, $src_h, $pct);//如果水印圖片本身帶透明色,則使用imagecopy方法//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);//輸出圖片list($dst_w, $dst_h, $dst_type) = getimagesize($dstPath);switch ($dst_type) {    case 1://GIFif (!$filename) {    header("Content-Type: image/gif");    imagegif($dst);} else {    imagegif($dst, $filename);}break;    case 2://JPGif (!$filename) {    header("Content-Type: image/jpeg");    imagejpeg($dst);} else {    imagejpeg($dst, $filename);}break;    case 3://PNGif (!$filename) {    header("Content-Type: image/png");    imagepng($dst);} else {    imagepng($dst, $filename);}break;    default:break;}imagedestroy($dst);imagedestroy($src);    }

第四步:合成文字信息

/**     *  添加文字到圖片上     * @param $dstPath string 目標圖片     * @param $fontPath string 字體路徑     * @param $fontSize string 字體大小     * @param $text string 文字內容     * @param $dstY string 文字Y坐標值     * @param string $filename 輸出文件名,為空則在瀏覽器上直接輸出顯示     * @return string 返回文件名     */    public static function addFontToPic($dstPath, $fontPath, $fontSize, $text, $dstY, $filename = "")    {ob_end_clean();//創建圖片的實例$dst = imagecreatefromstring(file_get_contents($dstPath));//打上文字$fontColor = imagecolorallocate($dst, 255, 255, 255);//字體顏色$width = imagesx($dst);$height = imagesy($dst);$fontBox = imagettfbbox($fontSize, 0, $fontPath, $text);//文字水平居中實質imagettftext($dst, $fontSize, 0, ceil(($width - $fontBox[2]) / 2), $dstY, $fontColor, $fontPath, $text);//輸出圖片list($dst_w, $dst_h, $dst_type) = getimagesize($dstPath);switch ($dst_type) {    case 1://GIFif (!$filename) {    header("Content-Type: image/gif");    imagegif($dst);} else {    imagegif($dst, $filename);}break;    case 2://JPGif (!$filename) {    header("Content-Type: image/jpeg");    imagejpeg($dst);} else {    imagejpeg($dst, $filename);}break;    case 3://PNGif (!$filename) {    header("Content-Type: image/png");    imagepng($dst);} else {    imagepng($dst, $filename);}break;    default:break;}imagedestroy($dst);return $filename;    }

外部的調用

/**     * 根據店鋪id 和名稱 合成A5 圖片小程序圖片     * @param $shop_id     * @param $shop_name     * @return array     */    public static function generateWeChatAppletImage($shop_id, $shop_name)    {//1 生成小程序碼//2 合成小程序碼到背景圖片$sceneStr = "?shop_id=" . $shop_id;$weChatAppImgBaseData = WxTools::getWeChatSmallProgramCode($sceneStr);$weChatAppImgPath = "./weChatAppImg/shop_code_" . $shop_id . ".jpg";file_put_contents($weChatAppImgPath, $weChatAppImgBaseData);//合并到背景圖片中$beiJinImgPath = "./weChatAppImg/weChatBJ.jpg";$mergeImgFile = "./weChatAppImg/shop_mini_program" . $shop_id . ".jpg";GenerateCodeImg::picMerge($beiJinImgPath, $weChatAppImgPath, 408, 714, $srcX = 0, $srcY = 0, $pct = 100, $mergeImgFile);//3 合成文字$fontPath = "./plus/fonts/SourceHanSansCN-Bold.ttf";$fontSize = 40;$dstY = 640;GenerateCodeImg::addFontToPic($mergeImgFile, $fontPath, $fontSize, $shop_name, $dstY, $mergeImgFile);$weChatCodeImgUrL = \Yii::$app->request->hostInfo . "/weChatAppImg/shop_code_" . $shop_id . ".jpg";$weChatAppImgUrl = \Yii::$app->request->hostInfo . "/weChatAppImg/shop_mini_program" . $shop_id . ".jpg";return [    "weChatCodeImgUrL" => $weChatCodeImgUrL,    "weChatAppImgUrl" => $weChatAppImgUrl,];    }

常見的問題

1文字合并的時候出現亂碼?

第一檢測一下字體是否是正常tff字體 如果不知道去C://windows/Fonts 隨便找一個 微軟雅黑都行

2、英文阿拉布數字正常 中文亂碼

$text = mb_convert_encoding("呵呵呵","UTF-8","GBK");

$text = mb_convert_encoding("呵呵呵","html-entities","UTF-8");

設置看看

到此這篇關于PHP實現圖片合并的示例詳解的文章就介紹到這了,更多相關PHP圖片合并內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人动漫一区二区三区| 国产乱子伦一区二区三区国色天香| 国产精品久久午夜| 久久国内精品视频| 欧美日韩亚洲一区| 欧美日韩成人在线一区| 国产精品久久久久一区二区三区共| 亚洲第四色夜色| 99免费精品在线| 色综合 综合色| 国产精品免费视频一区| 狠狠网亚洲精品| 亚洲电影在线| 精品奇米国产一区二区三区| 亚洲成人免费看| 国产91对白在线观看九色| 国产日韩一区二区三区| 国产亚洲一本大道中文在线| 麻豆91精品91久久久的内涵| 亚洲成人直播| 日韩一区二区三| 亚洲第一狼人社区| 欧美一区成人| 欧美电影一区二区三区| 亚洲国产精品一区二区www在线| 成人三级伦理片| 蜜桃久久精品乱码一区二区| 久久精品欧美日韩精品| 奇米777欧美一区二区| 99精品国产在热久久婷婷| 精品日韩一区二区| 久久国产视频网| 国产模特精品视频久久久久| 国产喂奶挤奶一区二区三区| 久久 天天综合| 免费亚洲婷婷| 国产日韩v精品一区二区| 国产一区不卡在线| 久久久久久网| 亚洲精品免费一二三区| 午夜欧美精品| 日韩午夜av电影| 国产一区欧美一区| 亚洲一区黄色| 136国产福利精品导航| 成人性生交大片| 欧美精品视频www在线观看| 午夜精品久久久| 一本色道久久99精品综合| 久久久无码精品亚洲日韩按摩| 国产一区二区在线电影| 亚洲欧美日韩视频二区| 综合av第一页| 欧美精品九九| 亚洲精品在线观看网站| 国产精品一区免费视频| 色美美综合视频| 亚洲国产精品久久不卡毛片 | 狠狠色丁香久久综合频道 | 欧美tk—视频vk| 国产美女视频91| 色婷婷综合久久| 午夜欧美2019年伦理 | 91久久久免费一区二区| 亚洲国产精品人人做人人爽| 在线亚洲伦理| 日韩一二在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美亚洲日本国产| 日本在线观看不卡视频| 久久综合九色| 日韩成人午夜电影| 色视频一区二区| 天天做天天摸天天爽国产一区| 亚洲一区黄色| 视频在线观看91| 一本色道久久综合亚洲精品按摩| 怡红院av一区二区三区| 亚洲黄色av| 日本一区二区三区四区| 女女同性女同一区二区三区91| 中文字幕欧美日韩一区| 韩国欧美一区| 日韩理论片中文av| 国产美女在线精品免费观看| 亚洲愉拍自拍另类高清精品| 亚洲国产免费| 一区二区三区在线视频播放| 制服诱惑一区二区| 亚洲成av人片在线观看无码| 久久看片网站| 精品一区二区在线看| 精品视频一区三区九区| 国产精品一区一区| 久久久久99精品一区| 91色视频在线| 国产精品狼人久久影院观看方式| 亚洲午夜电影| 亚洲天天做日日做天天谢日日欢| 999在线观看精品免费不卡网站| 中文字幕不卡的av| 亚洲精品美女久久7777777| 亚洲一区二区三区三| 色婷婷综合久久| 久久精品国产亚洲高清剧情介绍| 欧美三区在线观看| 国产aⅴ综合色| 精品国产乱码久久久久久免费| 91首页免费视频| 国产精品久久久久久久午夜片| 亚洲成色www久久网站| 欧美福利视频导航| 影音先锋久久精品| 国产另类ts人妖一区二区| 中文字幕av一区二区三区免费看| 在线观看一区不卡| 国产在线一区二区三区四区 | 丝袜亚洲精品中文字幕一区| 精品国产伦一区二区三区观看体验| 国产日韩在线一区二区三区| 国产激情精品久久久第一区二区| 一区二区三区日韩欧美精品| 国产亚洲一区二区三区| 在线视频一区二区免费| 激情欧美一区| 国产福利电影一区二区三区| 亚洲成av人**亚洲成av**| 久久久久久久久久久久电影| 91国偷自产一区二区开放时间 | 黑人巨大精品欧美一区| 综合自拍亚洲综合图不卡区| 欧美二区三区的天堂| 国产伦精品一区二区三区| 99国产精品国产精品久久| 久久99久久99| 亚洲成人自拍偷拍| 亚洲素人一区二区| 久久久久国产成人精品亚洲午夜| 亚洲高清视频一区二区| 丁香一区二区三区| 日韩精品亚洲一区二区三区免费| 国产精品久久毛片av大全日韩| 91精品国产麻豆国产自产在线 | 日日摸夜夜添夜夜添国产精品 | 午夜久久久影院| 国产精品久久久久久久久免费桃花 | 三级成人在线视频| 亚洲精品中文在线观看| 日韩欧美一区二区在线视频| 老牛国产精品一区的观看方式| 亚洲高清视频一区| 午夜精品免费| 成人精品一区二区三区四区| 久久国产精品99久久久久久老狼 | 国产欧美一区二区精品仙草咪| 欧美一区二区福利在线| 色8久久人人97超碰香蕉987| 99国产精品| 欧美日韩亚洲在线| 国产成人综合亚洲91猫咪| 日韩电影在线观看电影| 亚洲激情综合网| 国产精品色哟哟| 日本一区二区三区四区在线视频| 欧美精品一区在线观看| 91.xcao| 欧美亚洲精品一区| 国产精品久久久一区二区| 18成人免费观看视频| 国产精品s色| 国产自产在线视频一区| 午夜久久99| 欧美视频久久| 欧美日韩高清在线一区| 欧美1级日本1级| 欧美全黄视频| 国产一区二区中文| 午夜精品av| 红桃视频亚洲| 亚洲激情成人| 影音国产精品| 在线日韩电影| 欧美日韩少妇| 国内一区二区三区在线视频| 欧美激情第10页| 欧美精品v日韩精品v国产精品| 99re这里只有精品6| 成人国产精品免费观看视频| 国产成人综合精品三级| 国产精品一区二区无线| 国产一区二区剧情av在线| 国产精品中文有码| 国产精品亚洲一区二区三区妖精| 国产一区二区三区在线观看免费视频 | 91色.com| 欧美日韩免费观看一区| 精品91久久久久| 亚洲第一在线| 午夜在线a亚洲v天堂网2018| 另类av一区二区|