在PHP裡使用ImageMagick生成base64圖片

2020-12-04 億仁網

最近的PHP項目中,需要用到畫圖和圖片拼接效果。通過ImageMagick生成base64圖片格式,為前端所使用。PHP將圖片轉base64編碼以及base64圖片轉換為圖片並保存代碼:

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://localhost/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).圖片上拼接文字。寫入文字以添加店鋪文字為例,逐步完成文字的寫入。

詳細解讀: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);

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

$base64_image就是base64格式的圖片。

相關焦點

  • 實例-使用PHP類庫PHPqrCode生成二維碼
    PHPqrCode 是一個PHP二維碼生成類庫,利用它可以輕鬆生成二維碼,官網提供了下載和多個演示demo。下載官網提供的類庫後,只需要使用 phpqrcode.php 就可以生成二維碼了,你使用的PHP環境必須開啟支持GD2。
  • Centos環境中ImageMagick編譯教程
    imagemagick1、下載相應源碼zlib-1.2.8.tar.gzjpegsrc.v9b.tar.gzlibpng-1.6.26.tar.gzfreetype-2.7.tar.gz(可選,如果要使用文字轉圖片操作,這個依賴必不可少)libwebp-1.0.3.tar.gz
  • windows 檢查php版本專題及常見問題 - CSDN
    =32M apc.ttl=7200 apc.enable_cli=1 extension=php_imagick.dll         使用以下綠色文字替換紅色部分 {注意順序}。安裝imagick 模塊下載ImageMagick-7.0.7-4-Q16-x64-dll.exe,下載地址:( http://www.imagemagick.org/script/download.php ) 選擇windows
  • PHP圖片處理庫Grafika詳細教程(1):圖像基本處理
    我們在grafika目錄下建立一個index.php,之後的操作都在這裡。 grafika給我們提供了一個非常好用的autoloader.php位於src目錄下。 在index.php中引入它,(說明下,以下示例都需要引入這個autoloader.php文件,我們默認省略),下面就可以直接開發了。
  • Php常見問題總結
    > 然後在php.ini中設置:include_path = "c:/php",並將debug.php放在此文件夾,以後就可以在每個網頁裡包含此文件,查看得到的變量名和值.  在《mysql中文參考手冊》裡有這個例子,所以我也就寫出來了。   注意要使用PASSWORD函數,然後還要使用FLUSH PRIVILEGES。
  • 用R將圖片轉為字符畫
    作者:輝小寶同學微信公眾號:R語言和Python學堂知乎:
  • PHP實例——PHP創建動態圖像
    header ("Content-type: image/png");     使用ImageCreate()創建一個代表空白圖像的變量,這個函數要求以像素為單位的圖像大小的參數,其格式是ImageCreate(x_size, y_size)。
  • Image J - Image J:螢光圖片使用技巧
    Image J功能非常強大,大家可以看前幾期對的介紹,今天帶你解鎖老司機必會的Image J實用技巧,下面是針對螢光圖片的五個使用技巧。廢話不多說看下方介紹。toimage可以把像素值的表格轉換為圖片。
  • Image J:螢光圖片使用技巧
    Image J功能非常強大,大家可以看前幾期對的介紹,今天帶你解鎖老司機必會的Image J實用技巧,下面是針對螢光圖片的五個使用技巧。廢話不多說看下方介紹。toimage可以把像素值的表格轉換為圖片。
  • 圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各...
    很抱歉的是,本人使用keras的官方演示代碼,並沒有復現出zca_whitening的效果,當我的圖片resize成224×224時,代碼報內存錯誤,應該是在計算SVD的過程中數值太大。後來resize成28×28,就沒有內存錯誤了,但是代碼運行了一晚上都不結束,因此使用貓狗大戰圖片無法復現效果,這裡轉發另外一個博客使用mnist復現出的結果,如下圖4。
  • DVBBS php轉換工具使用教程
    >2、asp71ac-to-php10  動網的ASP7.1 AC 轉到 動網PHP1.03、asp71sql-to-php10  動網的ASP7.1 MSSQL 轉到 動網PHP1.04、dz41-to-php10  DISCUZ4.1 轉到 動網PHP1.05、dz50-to-php10  DISCUZ5.0 轉到 動網PHP1.0使用工具對
  • php中函數禁用繞過的原理與利用
    php new Imagick('test.mvg');利用那麼依舊以靶場題為例,依舊以擁有一句話馬兒為前提,我們首先上傳一個圖片,如上面所述的我們圖片的後綴無需mvg,因此上傳一個jpg圖片:push graphic-context viewbox 0 0 640 480 image over 0,0 0,0 'https://127.0.0.1/x.php
  • 使用神經網絡為圖像生成標題
    神經網絡在計算機視覺和自然語言生成方面的應用已經非常引人注目。本文將介紹神經網絡的一個這樣的應用,並讓讀者了解如何使用CNNs和RNNs (LSTM)的混合網絡實際為圖像生成標題(描述)。我們在這個任務中使用的數據集是流行的flickr 8k圖像數據集注意:我們將把數據集分割為7k用於訓練,1k用於測試。
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    在本篇文章中,除了那些我看電視節目和玩遊戲的時間,我敘述了在過去六個月的幾乎所有空閒時間裡所做的探索。現今,「機器學習」發展迅速,並有大量相關的文章,包括那些 Medium 上的博客,同時幾乎每位開發人員都開始在工作任務和本地項目中使用機器學習,但是從何處開始以及使用什麼方法總是令人困惑的。
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    從一張低解析度的圖片生成一張對應的高解析度圖片的任務通常被稱為單圖超分(Single Image Super Resolution - SISR)。儘管可以使用傳統的插值方法(如雙線性插值和雙三次插值)來完成這個任務,但是產生的圖片質量卻經常差強人意。
  • php基礎大通關——十分鐘了解php基礎知識點之二
    本節我們繼續通過練習題的方式來熟悉php的基礎知識點。1. echo 和 print 有什麼區別?是一個開源 CMS 軟體,可以輕鬆地從 Internet 瀏覽器創建和管理主頁,即使沒有 HTML,CSS,FTP 等專業知識基礎,也可以使用 CMS 輕鬆使用瀏覽器創建主頁。例如,如果您使用過 Word,Excel,就可以使用 CMS 相對輕鬆地創建內容。4. set_time_limit() 中設置的默認執行時間是多少?
  • PHP文件包含漏洞利用思路與Bypass總結手冊(二)
    模塊模式Apache 2.0 HandlerPHP作為Apache模塊,Apache伺服器在系統啟動後,預先生成多個進程副本駐留在內存中,一旦有請求出 現,就立即使用這些空餘的子進程進行處理,這樣就不存在生成子進程造成的延遲了。這些伺服器副本在處理完一次HTTP請求之後並不立即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。
  • polarphp 0.0.1 alpha 發布:全新 PHP 運行時環境
    提供內置的API文檔生成工具。在設計上參考Java的JDK的模塊組織風格,為PHP提供一套嚴謹並且功能強大的運行時標準庫,讓實現服務端高效編程成為可能,比如使用PHP實現類似Netty那樣的事件驅動的網絡框架,或者CoreDNS那樣的應用項目成為可能。同時也可以讓開發終端程序比如npm,Cargo和PM2等等類似的程序更加便捷。
  • 怎麼理解php中的數組?php的數組創建和使用方法是什麼?
    php數組的定義數組就是值類型相同的變量的集合,在PHP中的一種常用的複合數據類型,數據可以存放很多的數據,可以存儲任何類型的數據。我們可以把變量當做一個包含值得盒子,那麼可以把數組當做當成一個帶有隔層的盒子,每一層都可以存放一個值。