国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在PHP里使用ImageMagick生成base64圖片

supernavy / 1825人閱讀

摘要:個(gè)人博客本文原地址最近的項(xiàng)目中,需要用到畫(huà)圖和圖片拼接效果,這里是一些開(kāi)發(fā)過(guò)程里用到的一些點(diǎn)還有就是一些踩過(guò)的坑。通過(guò)生成圖片格式,為前端所使用。需要注意的是前端得到的額數(shù)據(jù)里包含有回車字符,需要特殊處理才可以正確顯示圖片。

個(gè)人博客 https://duanruilong.github.io/blog/

本文原地址https://duanruilong.github.io/blog/2018/09/05/%E5%9C%A8PHP%E9%87%8C%E5%BE%88%E5%A5%BD%E7%9A%84%E4%BD%BF%E7%94%A8ImageMagick/

最近的PHP項(xiàng)目中,需要用到畫(huà)圖和圖片拼接效果,這里是一些開(kāi)發(fā)過(guò)程里用到的一些點(diǎn)還有就是一些踩過(guò)的坑。通過(guò)ImageMagick生成base64圖片格式,為前端所使用。

一些需要的知識(shí)點(diǎn)
PHP將圖片轉(zhuǎn)base64編碼以及base64圖片轉(zhuǎn)換為圖片并保存代碼 圖片轉(zhuǎn)base64編碼
/*圖片轉(zhuǎn)換為 base64格式編碼*/
$img = "uploads/about.png";
$base64_img = base64EncodeImage($img);
echo "";
 
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圖片轉(zhuǎn)換為圖片并保存
/*  base64格式編碼轉(zhuǎn)換為圖片并保存對(duì)應(yīng)文件夾 */
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)){
            //檢查是否有該文件夾,如果沒(méi)有就創(chuàng)建,并給予最高權(quán)限
            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個(gè)字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法。
Base64的原理很簡(jiǎn)單,首先,準(zhǔn)備一個(gè)包含64個(gè)字符的數(shù)組:

["A", "B", "C", ... "a", "b", "c", ... "0", "1", ... "+", "/"]
然后,對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行處理,每3個(gè)字節(jié)一組,一共是3x8=24bit,劃為4組,每組正好6個(gè)bit

如果要編碼的二進(jìn)制數(shù)據(jù)不是3的倍數(shù),最后會(huì)剩下1個(gè)或2個(gè)字節(jié)怎么辦?Base64用x00字節(jié)在末尾補(bǔ)足后,再在編碼的末尾加上1個(gè)或2個(gè)=號(hào),表示補(bǔ)了多少字節(jié),解碼的時(shí)候,會(huì)自動(dòng)去掉。

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

Imagick具體操作 (1).創(chuàng)建一個(gè)底圖,寬750px,高1046px,白色背景,格式為jpg的圖片
// 初始化一個(gè)畫(huà)板
        $img =new Imagick();
        $img->newImage(750,1046,"white","jpg") ; 
        
(2).在底圖上添加需求圖片

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

$item_img="https://img.alicdn.com/bao/uploaded/i1/1750208593/TB1rgM3hhtnkeRjSZSgXXXAuXXa_!!0-item_pic.jpg"

第一步:實(shí)例化圖片
$imgtwo = new Imagick($item_img);

第二步:設(shè)置添加圖片的大小
$imgtwo->resizeImage(750,764,Imagick::FILTER_LANCZOS,1);

關(guān)于resizeImage參數(shù)說(shuō)明
    bool Imagick::resizeImage ( int $columns , int $rows , int $filter , float $blur [, bool $bestfit = false ] )

參數(shù):
  ● columns 圖片的寬度
  ● rows 圖片高度
  ● filter 過(guò)濾器,用于過(guò)濾圖片,有高斯filte根據(jù)情況而定
  ● 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 ] )

參數(shù):
  ● composite_object :用于合并的圖片的Imagick對(duì)象
  ● composite:合并操作,定義操作常量。 具體請(qǐng)查看 合并操作常量列表
  ● x:相對(duì)圖像頂點(diǎn)左上位置(0,0)的橫坐標(biāo)
  ● y:相對(duì)圖像頂點(diǎn)左上位置(0,0)的縱坐標(biāo)
  ● channel:通過(guò)傳入一個(gè)通道常量,來(lái)開(kāi)啟通道模式。為了支持多個(gè)通道,可以通過(guò)二進(jìn)制運(yùn)算的操作來(lái)合并多個(gè)通道常量。

到這里就可以得到一個(gè)合并的圖片了
1、加一個(gè)header信息,可以直接在網(wǎng)頁(yè)上查看圖片
    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;    //要生成的圖片的路徑,隨機(jī)生成圖片名稱

(3).圖片上拼接文字

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

    $shop_title="測(cè)試店鋪";
    // 添加店鋪文字
    $drawQr = new ImagickDraw(); // 實(shí)例化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); // 畫(huà)出文字
    $img -> drawImage($drawQr);  // 畫(huà)在地板上

詳細(xì)解讀:

1、實(shí)例化ImagickDraw類:
$drawQr = new ImagickDraw();

2、設(shè)置字體顏色

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

3、設(shè)置字體大小

$drawQr -> setFontSize("24");

4、設(shè)置字體格式

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

5、設(shè)置字體方向

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

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

6、設(shè)置字體編碼

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

7、畫(huà)出文字

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

8、在底圖上寫(xiě)入字體

$img -> drawImage($drawQr);

寫(xiě)入文字這個(gè)地方的一些坑:

沒(méi)有設(shè)置字體格式時(shí),中文字會(huì)解析錯(cuò)誤
(英文沒(méi)有問(wèn)題)

(漢字解析失敗)

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

(4).圖片base64導(dǎo)出

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

    $dest_img="/data/tmp/" . md5(microtime(true)).".".$type; //要生成的圖片的路徑
    $Return = array();
    // *圖片轉(zhuǎn)換為 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數(shù)據(jù)里包含有" "回車字符,需要特殊處理才可以正確顯示圖片。

(最后得到的合并圖片)

(調(diào)整拼接圖片大小得到不同的圖片)

最后來(lái)一組單打詹!!!

覺(jué)得喜歡歡迎關(guān)注,start

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97744.html

相關(guān)文章

  • PHP使用ImageMagick生成base64圖片

    摘要:個(gè)人博客本文原地址最近的項(xiàng)目中,需要用到畫(huà)圖和圖片拼接效果,這里是一些開(kāi)發(fā)過(guò)程里用到的一些點(diǎn)還有就是一些踩過(guò)的坑。通過(guò)生成圖片格式,為前端所使用。需要注意的是前端得到的額數(shù)據(jù)里包含有回車字符,需要特殊處理才可以正確顯示圖片。 個(gè)人博客 https://duanruilong.github.io/blog/本文原地址https://duanruilong.github.io/blog/2...

    avwu 評(píng)論0 收藏0
  • PHP很好的使用ImageMagick---convert篇

    摘要:指定字體和顏色創(chuàng)建一個(gè)底圖創(chuàng)建一個(gè)白色的底圖,我們可以在上面繪制文字創(chuàng)建一個(gè)底圖并且加上一些文字要生成的圖片的路徑可以在服務(wù)器端看到這里需要注意一下文字的繪制命令順序,否則會(huì)出現(xiàn)沒(méi)有生效的問(wèn)題。 [原文鏈接]https://duanruilong.github.io...://duanruilong.github.io/blog/2018/09/18/%E5%9C%A8PHP%E9%8...

    DTeam 評(píng)論0 收藏0
  • PHP很好的使用ImageMagick---convert篇

    摘要:指定字體和顏色創(chuàng)建一個(gè)底圖創(chuàng)建一個(gè)白色的底圖,我們可以在上面繪制文字創(chuàng)建一個(gè)底圖并且加上一些文字要生成的圖片的路徑可以在服務(wù)器端看到這里需要注意一下文字的繪制命令順序,否則會(huì)出現(xiàn)沒(méi)有生效的問(wèn)題。 [原文鏈接]https://duanruilong.github.io...://duanruilong.github.io/blog/2018/09/18/%E5%9C%A8PHP%E9%8...

    miguel.jiang 評(píng)論0 收藏0
  • Centos 下編譯PHP圖片擴(kuò)展庫(kù) ImageMagick、MagickWandForPHP、im

    摘要:安裝環(huán)境說(shuō)明操作系統(tǒng)安裝路徑開(kāi)始編譯開(kāi)始編譯配置支持?jǐn)U展修改以下內(nèi)容增加擴(kuò)展到重新啟動(dòng)開(kāi)始編譯配置支持?jǐn)U展修改以下內(nèi)容增加擴(kuò)展到重新啟動(dòng)測(cè)試勞動(dòng)結(jié)果查看模塊是 安裝環(huán)境說(shuō)明: 操作系統(tǒng):Centos 6.5 -64bit 安裝路徑:/usr/local/redis 開(kāi)始編譯 ImageMagick tar -zxvf ImageMagick-6.8.9-10.tar.gz cd Ima...

    netmou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<