国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > 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

(漢字解析失敗)

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圖片(代碼)的詳細內容,更多請關注 其它相關文章!

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
97影院理论午夜| 俺来俺也去www色在线观看| 四虎成人精品在永久在线观看| 超碰在线网站| www免费在线观看视频| www.中文字幕久久久| 九色福利视频| 国产黄色片中文字幕| 成人欧美亚洲| 国产精品偷乱一区二区三区| 黄色在线视频观看网站| 九九热免费在线视频| 国产午夜在线| www.av在线播放| 日本aⅴ写真网站免费| 国产专区在线| 国产无遮挡又黄又爽免费软件| 国产一级片在线播放| 国产乱xxⅹxx国语对白| 国产精品综合久久久久| 国产精品美女视频免费观看软件| 国产精品久久久精品a级小说| 高清色视频在线观看| 九九热在线观看| 在线国产中文字幕| 国产网站免费观看| 国产在线日本| 热99re久久精品精品免费| 国产性网软件大全| 俺来俺也去www色在线观看| 国产香蕉尹人视频在线| 开心快乐六月丁香婷婷| 永久av在线| 国产精品国产国产aⅴ| 开心快乐六月丁香婷婷| 四虎成人免费观看在线网址| 国产三级自拍| 国产无套粉嫩白浆在线2022年| ·天天天天操| 激情六月丁香| 久热国产视频| 九九热在线观看 | 在线观看国产视频| 日本一二三区视频免费高清| ·天天天天操| av福利在线观看| 18激情网站| 在线观看av中文| 日本调教视频在线观看| www.av在线视频| 青青艹在线视频| 国产在线观看a| 国产麻豆免费| 国产成人久久精品77777| 国产成人精品自线拍| 精品无吗乱吗av国产爱色| 精品福利视频导航大全| 伊人精品影院| 在线一区二区三区精品| 亚洲网站视频在线观看| 久久精品最新免费国产成人| 福利在线国产| 国产不卡视频| av中文在线| 中文字幕高清av| 2018中文字幕在线观看| 在线免费看黄av| 免费观看久久久久| 中文字幕在线观看av| √8天堂资源地址中文在线| 亚洲网站视频在线观看| 尤物网站在线| 一区二区免费播放| 欧洲亚洲精品视频| 国产三级香港三韩国三级| 精品卡一卡卡2卡3网站| 九九热在线免费视频| 97视频免费| 国产偷窥老熟盗摄视频| 免费在线看v| 精品久久亚洲一级α| 国产剧情av在线| 日本韩国精品一区二区| 国产高清一区二区三区视频| 九九99精品| www.99av| 亚洲免费国产| 亚洲一区二区三区在线观看网站| 日本啊v在线| 中文字幕国产在线| 日本免费不卡| 日本三级在线视频| 亚洲欧美精品日韩欧美| 精品一区二区在线欧美| 国产成人亚洲综合小说区| 91超碰在线免费| 久草在线视频网| 九九精品视频在线观看九九| 欧美视频免费一区二区三区| 亚洲最新永久在线观看| 影音先锋中文字幕在线| 精品极品三级久久久久| 99高清免费国产自产拍| 国产黄色av免费看| 69久久久久| 在线免费观看高清视频色| 中文资源在线官网| 在线黄色国产电影| www.操操操.com| 黄色国产网站在线观看| 国产中文字幕在线视频| 国产美女高潮一区二区三区| 国产中文字幕在线观看| 中文字幕网在线| 国产高清在线观看| 99reav| 欧美精品久久久久久久小说| 久久五月精品中文字幕| 国产免费高清| 国产区高清在线| av首页在线| 成人av小说网| 国产精品久久在线| eeuss影院www在线观看| 91超碰免费在线| 午夜影院免费看| 国产一卡2卡3卡免费网站| 伊人狠狠av| 国产一级在线| 麻豆福利在线观看| 2019年中文字幕| 国产美女免费观看| 夜夜嗨yeyeh| 国产有码在线| 在线一区二区三区精品| 久久国产热视频| 国产黄色av免费看| 国产专区在线播放| 亚洲成人av在线影院| 国产亚洲依依| 国产免费黄网站| 欧美亚洲天堂| 四虎网站在线观看| 91在线超碰| 国产区在线看| 国产午夜在线观看| 中文字幕在线视频网| 免费a在线看| 一本大道香蕉8中文在线视频| 亚洲v片在线观看| 五月婷婷视频在线观看| wwwww在线观看免费视频| 国产精品欧美色图| 国内精品免费一区二区三区| 中文日本在线观看| ·天天天天操| 国产黄色免费网| 国产精品毛片一区二区三区四区| 日本国产在线| 99reav| 亚洲an天堂an在线观看| 国产福利在线| 尤物在线视频| 狠狠狠综合7777久夜色撩人| 欧美性猛交xxxx免费看蜜桃| 天天操夜夜添| 青青草免费观看免费视频在线| 在线视频婷婷| 国产不卡精品一区二区三区| 国产在线观看网站| 老司机精品视频一区二区| 蜜桃视频中文字幕| 成年午夜在线| 国产高清在线| 性色视频在线| 狠狠干天天干| 国产aa视频| 日本成人在线播放| 亚洲精品在线视频免费| 青青久在线视频免费观看| 久热中文字幕在线观看| 国产性色视频| 在线免费观看黄色片| 日韩亚洲一区中文字幕| 狠狠干婷婷色| 精品国产一区二区三区久久久狼牙 | 国产videos| 亚洲视频在线网| www.久草.com| 中文字幕日本在线| 伊人av免费在线观看| 国产成人亚洲欧美电影| www.操.com| 国产激情三区| a视频免费看| 国产人成精品| 国产免费高清| 日本视频一二三区中文字幕| 国产一级黄色片免费| 操操操综合网|