亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php中如何使用ImageMagick生成base64圖片(代碼)

2020-03-24 18:12:24
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于php中如何使用ImageMagick生成base64圖片(代碼) ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

最近的PHP項目中,需要用到畫圖和圖片拼接效果,這里是一些開發過程里用到的一些點還有就是一些踩過的坑。通過ImageMagick生成base64圖片格式,為前端所使用。

一些需要的知識點

PHP將圖片轉base64編碼以及base64圖片轉換為圖片并保存代碼

圖片轉base64編碼

/*圖片轉換為 base64格式編碼*/$img = 'uploads/about.png';$base64_img = base64EncodeImage($img);echo '<img src="' . $base64_img . '" />'; function base64EncodeImage ($image_file) {    $base64_image = '';    $image_info = getimagesize($image_file);    $image_data = fread(fopen($image_file, 'r'), filesize($image_file));    $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));    return $base64_image;}

base64圖片轉換為圖片并保存

/*  base64格式編碼轉換為圖片并保存對應文件夾 */function base64_image_content($base64_image_content,$path){    //匹配出圖片的格式    if (preg_match('/^(data:/s*image//(/w+);base64,)/', $base64_image_content, $result)){        $type = $result[2];        $new_file = $path."/".date('Ymd',time())."/";        if(!file_exists($new_file)){            //檢查是否有該文件夾,如果沒有就創建,并給予最高權限            mkdir($new_file, 0700);        }        $new_file = $new_file.time().".{$type}";        if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){            return '/'.$new_file;        }else{            return false;        }    }else{        return false;    }} echo base64_image_content($base64_img,"uploads/");

base64

Base64是一種用64個字符來表示任意二進制數據的方法。
Base64的原理很簡單,首先,準備一個包含64個字符的數組:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
然后,對二進制數據進行處理,每3個字節一組,一共是3x8=24bit,劃為4組,每組正好6個bit

如果要編碼的二進制數據不是3的倍數,最后會剩下1個或2個字節怎么辦?Base64用x00字節在末尾補足后,再在編碼的末尾加上1個或2個=號,表示補了多少字節,解碼的時候,會自動去掉。

使用jpg圖片體積要比png小
使用PHP的Imagick類進行圖像的操作

Imagick具體操作

(1).創建一個底圖,寬750px,高1046px,白色背景,格式為jpg的圖片

// 初始化一個畫板        $img =new Imagick();        $img->newImage(750,1046,'white','jpg') ;

(2).在底圖上添加需求圖片

前提是我們已經知道了需要合并的圖片鏈接地址

$item_img='https://img.alicdn.com/bao/uploaded/i1/1750208593/TB1rgM3hhtnkeRjSZSgXXXAuXXa_!!0-item_pic.jpg'第一步:實例化圖片$imgtwo = new Imagick($item_img);第二步:設置添加圖片的大小$imgtwo->resizeImage(750,764,Imagick::FILTER_LANCZOS,1);關于resizeImage參數說明    bool Imagick::resizeImage ( int $columns , int $rows , int $filter , float $blur [, bool $bestfit = false ] )參數:  ● columns 圖片的寬度  ● rows 圖片高度  ● filter 過濾器,用于過濾圖片,有高斯filte根據情況而定  ● blur blur=1 為虛化, blur =-1 為銳化第三步:與底圖合并$img->compositeImage($imgtwo,$imgtwo->getImageCompose(),0,0);使用compositeImage();    bool Imagick::compositeImage ( Imagick $composite_object , int $composite , int $x , int $y [, int $channel = Imagick::CHANNEL_ALL ] )參數:  ● composite_object :用于合并的圖片的Imagick對象  ● composite:合并操作,定義操作常量。 具體請查看 合并操作常量列表  ● x:相對圖像頂點左上位置(0,0)的橫坐標  ● y:相對圖像頂點左上位置(0,0)的縱坐標  ● channel:通過傳入一個通道常量,來開啟通道模式。為了支持多個通道,可以通過二進制運算的操作來合并多個通道常量。到這里就可以得到一個合并的圖片了1、加一個header信息,可以直接在網頁上查看圖片    header("Content-Type: img/png");    echo $img;2、可以把圖片在指定目錄中生成,在指定目錄下生成為img.png    $file="./img.png";    $img->writeImage($file);我這里是這樣處理:    header ( 'Content-type: ' . strtolower ($img->getImageFormat ()) );    $type = strtolower($img->getImageFormat());    $dest_img='/data/tmp/' . md5(microtime(true)).'.'.$type;    //要生成的圖片的路徑,隨機生成圖片名稱

(3).圖片上拼接文字

寫入文字以添加店鋪文字為例,逐步完成文字的寫入。

    $shop_title='測試店鋪';    // 添加店鋪文字    $drawQr = new ImagickDraw(); // 實例化ImagickDraw    $drawQr -> setFillColor(new ImagickPixel('#999999')); // 顏色    $drawQr -> setFontSize('24'); // 大小    $drawQr -> setFont('../../conf/Microsoftyahei.ttf'); // 字體    $drawQr -> setTextAlignment(Imagick::ALIGN_LEFT); // 字體方向    // ps: Imagick::ALIGN_RIGHT 朝右邊    Imagick::ALIGN_LEFT 左邊   Imagick::ALIGN_CENTER 中間    $drawQr -> setTextEncoding("utf-8"); // 字體編碼    $drawQr -> annotation(114,990,$shop_title); // 畫出文字    $img -> drawImage($drawQr);  // 畫在地板上

詳細解讀:

1、實例化ImagickDraw類:

$drawQr = new ImagickDraw();

2、設置字體顏色

$drawQr -> setFillColor(new ImagickPixel('#999999'));

3、設置字體大小

$drawQr -> setFontSize('24');

4、設置字體格式

$drawQr -> setFont('../../conf/Microsoftyahei.ttf');

5、設置字體方向

$draw->setTextAlignment(Imagick::ALIGN_RIGHT);

ps: Imagick::ALIGN_RIGHT 朝右邊 Imagick::ALIGN_LEFT 左邊 Imagick::ALIGN_CENTER 中間

6、設置字體編碼

$drawQr -> setTextEncoding("utf-8");

7、畫出文字

$drawQr -> annotation(114,990,$shop_title);

8、在底圖上寫入字體

$img -> drawImage($drawQr);

寫入文字這個地方的一些坑:

沒有設置字體格式時,中文字會解析錯誤
(英文沒有問題)

1194728351-5b9a125260081_articlex.png

(漢字解析失?。?/p>

1919625869-5b9a12527be91_articlex.png

(設置字體格式正常顯示)

4066479041-5b9a1252748db_articlex.png

(4).圖片base64導出

最終得到的圖片我們組要以base64的格式傳遞給前端,進行以下操作,把我們最后拼接的到的圖片base64轉換輸出。

    $dest_img='/data/tmp/' . md5(microtime(true)).'.'.$type; //要生成的圖片的路徑    $Return = array();    // *圖片轉換為 base64格式編碼*    $base64_image = '';    $image_info = getimagesize($dest_img);    $image_data = fread(fopen($dest_img, 'r'), filesize($dest_img));    $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));    $Return['data']=$base64_image;    return  $Return;

$base64_image就是base64格式的圖片。

需要注意的是前端得到的額base64數據里包含有'/r/n'回車字符,需要特殊處理才可以正確顯示圖片。

2665486350-5b9a1253b1c6e_articlex.png

最后會得到的合并圖片,可以調整拼接圖片大小得到不同的圖片。

相關推薦:

圖片上傳并使用ImageMagick生成縮略圖

php實現圖片上傳并利用ImageMagick生成縮略圖,

以上就是php中如何使用ImageMagick生成base64圖片(代碼)的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人在线视频| 国产精品9999| 日韩激情片免费| 久久深夜福利免费观看| 日韩毛片中文字幕| 国产精品91在线| 国模精品视频一区二区| 亚洲精品久久久久国产| 日韩av影片在线观看| 国产精品永久免费视频| 久久亚洲国产成人| 久久久久久久久久av| 亚洲一区二区三区xxx视频| 综合136福利视频在线| 亚洲色图18p| 欧美激情中文网| 久久久www成人免费精品张筱雨| 8090成年在线看片午夜| 亚洲精品电影网| 亚洲欧美成人在线| 久久久久久亚洲| 日韩视频免费中文字幕| 国产精品成人品| 国产精品高清在线| 国产精品亚洲激情| 久久人人爽人人| 成人激情综合网| 伊人久久大香线蕉av一区二区| 亚洲欧美一区二区三区情侣bbw| 午夜精品久久久久久久白皮肤| 亚洲另类激情图| 国产精品电影网站| 国产一区二区三区直播精品电影| 国产精品网址在线| 久久久久久久久久久人体| 欧美成人免费视频| 成人h视频在线观看播放| 九九精品视频在线| 亚洲国产精品成人一区二区| 色偷偷综合社区| 丁香五六月婷婷久久激情| 精品国产鲁一鲁一区二区张丽| 日韩精品极品毛片系列视频| 欧美专区在线播放| 色无极影院亚洲| 在线观看国产精品淫| 国产一区二区三区直播精品电影| 欧美孕妇孕交黑巨大网站| 91精品国产91久久久久久吃药| 久久久久久久久久久久久久久久久久av| 亚洲欧洲国产一区| 成人免费在线网址| 18一19gay欧美视频网站| 91欧美精品午夜性色福利在线| 成人写真福利网| 久久国产精品影视| 日韩中文在线观看| 久久夜精品香蕉| 日韩av网站在线| 色综合久久88| xxx欧美精品| 久久精品国产久精国产思思| 久热精品视频在线观看| 美女黄色丝袜一区| 亚洲影视九九影院在线观看| 亚洲高清免费观看高清完整版| 国产午夜一区二区| 成人av电影天堂| 91免费视频网站| 亚洲国内精品视频| 欧洲成人午夜免费大片| 亚洲第一av网| 国产成人91久久精品| 欧美大片免费看| 97在线免费观看| 欧美日韩亚洲国产一区| 中文字幕日韩欧美在线| 国产激情999| 91黑丝在线观看| 久久噜噜噜精品国产亚洲综合| 国产精品一区二区三区免费视频| 国产日韩欧美综合| 久久久精品免费| 国内自拍欧美激情| 国产精品久久久久久久久久| 久久久av电影| 伊人精品在线观看| 欧美精品福利视频| 欧美性猛交xxxx免费看漫画| 国产精品久久久久久久久久东京| 中文字幕日韩av| 91久久综合亚洲鲁鲁五月天| 国产精品爽黄69| 中文字幕亚洲精品| 久久精品国产91精品亚洲| 日韩精品中文在线观看| 91精品国产777在线观看| 日韩美女视频免费在线观看| 日韩精品中文字幕久久臀| 97国产真实伦对白精彩视频8| 日韩欧美中文字幕在线观看| 欧美亚洲国产精品| 亚洲电影第1页| 国产在线98福利播放视频| 亚洲精品一区二区三区婷婷月| 久久夜色精品国产亚洲aⅴ| 91精品国产沙发| 国产午夜精品免费一区二区三区| xvideos亚洲| 热久久这里只有精品| 日韩中文字幕在线播放| www.久久色.com| 国产亚洲激情在线| 91麻豆国产语对白在线观看| 伊人久久久久久久久久| 久久精品人人做人人爽| 国产视频999| 欧美日韩中文字幕在线| 91po在线观看91精品国产性色| 色婷婷成人综合| 久久亚洲综合国产精品99麻豆精品福利| 日韩中文字幕在线播放| 成人国产在线视频| 午夜精品一区二区三区在线视| 日韩欧美精品网站| 亚洲国产另类 国产精品国产免费| 国产精品久在线观看| 4388成人网| 国产精品男人爽免费视频1| 国产精品偷伦一区二区| 欧美日韩中文字幕在线| 久久激情五月丁香伊人| 国产综合在线视频| 91精品久久久久久久久久| 91高清视频免费| 成人在线观看视频网站| 国语对白做受69| 国产日韩欧美影视| 亚洲国产精品久久精品怡红院| 亚洲精品久久久久中文字幕二区| 亚洲黄色av女优在线观看| 亚洲欧美色图片| 日本韩国欧美精品大片卡二| 久久视频在线免费观看| 国产精品日韩专区| 久久综合国产精品台湾中文娱乐网| 最近2019中文免费高清视频观看www99| 国产精品男女猛烈高潮激情| 亚洲精品一区二区三区婷婷月| 成人美女av在线直播| 欧美日韩国产在线| 午夜精品久久久99热福利| 青青青国产精品一区二区| 欧美一区二区大胆人体摄影专业网站| 亚洲国产高清自拍| www.日韩系列| 九九热这里只有在线精品视| 川上优av一区二区线观看| 国产精品狠色婷| 欧美国产在线视频| 日韩电视剧免费观看网站| 国产精品jizz在线观看麻豆| 亚洲色图激情小说| 亚洲国产欧美日韩精品|