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

資訊專欄INFORMATION COLUMN

在PHP里很好的使用ImageMagick---convert篇

DTeam / 3597人閱讀

摘要:指定字體和顏色創(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%87%8C%E5%BE%88%E5%A5%BD%E7%9A%84%E4%BD%BF%E7%94%A8ImageMagick-convert%E7%AF%87/)

ImageMagick 包括一組命令行工具來(lái)操作圖片,之前的ImageMagick實(shí)現(xiàn)base64圖片的邏輯在服務(wù)器端可能會(huì)造成溢出的事故,所以在接下的文章里會(huì)介紹另外一種好的實(shí)現(xiàn)方式就是----convert命令。使用命令格式的形式去生成圖片和大小的裁剪數(shù)據(jù)格式的轉(zhuǎn)換。

基本命令與格式 1、基本命令

magick: 創(chuàng)建、編輯圖像,轉(zhuǎn)換圖像格式,以及調(diào)整圖像大小、模糊、裁切、除去雜點(diǎn)、抖動(dòng) ( dither )、繪圖、翻轉(zhuǎn)、合并、重新采樣等。

convert: 等同于 magick 命令。

identify: 輸出一個(gè)或多個(gè)圖像文件的格式和特征信息,如分辨率、大小、尺寸、色彩空間等。

mogrify: 與 magick 功能一樣,不過(guò)不需要指定輸出文件,自動(dòng)覆蓋原始圖像文件。

composite: 將一個(gè)圖片或多個(gè)圖片組合成新圖片。

montage: 組合多個(gè)獨(dú)立的圖像來(lái)創(chuàng)建合成圖像。每個(gè)圖像都可以用邊框,透明度等特性進(jìn)行裝飾。

compare: 從數(shù)學(xué)和視覺(jué)角度比較源圖像與重建圖像之間的差異。

display: 在任何 X server 上顯示一個(gè)圖像或圖像序列。

animate: 在任何 X server 上顯示圖像序列。

import: 保存 X server 上的任何可見(jiàn)窗口并把它作為圖像文件輸出。可以捕捉單個(gè)窗口,整個(gè)屏幕或屏幕的任意矩形部分。

conjure: 解釋并執(zhí)行 MSL ( Magick Scripting Language ) 寫(xiě)的腳本。

stream: 一個(gè)輕量級(jí)工具,用于將圖像或部分圖像的一個(gè)或多個(gè)像素組件流式傳輸?shù)酱鎯?chǔ)設(shè)備。在處理大圖像或原始像素組件時(shí)很有用。

2、命令格式

基本命令的使用,遵循 Unix 風(fēng)格的標(biāo)準(zhǔn)格式,例如 command [options] input_image output_image

將一張寬高 300x300 的圖片 goods.png 轉(zhuǎn)換成 200x200 的goods.jpg,可以這樣用
convert -resize 200x200 goods.png goods.jpg
開(kāi)始繪制生成圖片 一些前期參數(shù) 1、入?yún)?/b>
$item_img="https://img.alicdn.com/bao/uploaded/i1/1750208593/TB1rgM3hhtnkeRjSZSgXXXAuXXa_!!0-item_pic.jpg";
$item_title="測(cè)試字體";
$shop_title="測(cè)試店鋪";
$shop_img="http://q.aiyongbao.com/item/web/images/qap_img/mobile/userAvatar.png";
$qr_img="https://img.alicdn.com/tfscom/TB1uJDStYZnBKNjSZFKwu3GOVXa.png";
$numid_share="0000000";
$qr_title="長(zhǎng)按識(shí)別二維碼";

// 對(duì)寶貝標(biāo)題裁剪
$drawtitone=mb_substr($item_title,0,13, "utf-8");
$drawtittow=mb_substr($item_title,13,13, "utf-8");
$drawtitthree=mb_substr($item_title,26,13, "utf-8");
$time_date = time(); // 時(shí)間戳
$workDir = "/data/tmp/".$numid_share."_con".$time_date; // 目標(biāo)路徑---->指定一個(gè)文件夾保存生成圖片過(guò)程里的圖片
2、先下載素材文件

我們這里需要一個(gè)拼接圖片的鏈接,所以先下載到之前的創(chuàng)建的文件夾下,因?yàn)檫@些素材圖片只是為了最后的拼接,最后可以完全刪除。

$item_img_down = $workDir."/itemimage.jpg";
$shop_img_down = $workDir."/shopimage.jpg";
$qr_img_down = $workDir."/qrimage.jpg";
// 下載寶貝主圖
NetworkUtils::curlDownload($item_img, $item_img_down);
// 下載店鋪圖片
NetworkUtils::curlDownload($shop_img, $shop_img_down);
// 下載二維碼
NetworkUtils::curlDownload($qr_img, $qr_img_down);

NetworkUtils::curlDownload($item_img, $item_img_down); 下載$item_img保存在目標(biāo)路徑文件夾下的$workDir."/itemimage.jpg"路徑。

3、指定字體和顏色
$fontFamily = "/usr/share/fonts/chinese/msyh.ttf";
$fontColor = "#333333";
$fontColor_shoptitle = "#999999";
$fontColor_qrtitlt = "#666666";
4、創(chuàng)建一個(gè)底圖

創(chuàng)建一個(gè)750x1046白色的底圖,我們可以在上面繪制文字

// 創(chuàng)建一個(gè)底圖(并且加上一些文字)

$back_img=$workDir."/bg.jpg"; //要生成的圖片的路徑---->可以在服務(wù)器端看到
$back_cmds="convert "xc:[750x1046!]" -background white -font {$fontFamily} -draw "text 580,994 "{$qr_title}"" -fill "{$fontColor_qrtitlt}" 
            -pointsize 20 -draw "text 114,990 "{$shop_title}"" -font {$fontFamily} -pointsize 22 -fill "#999999" {$workDir}/bg.jpg";
$result_back_cmds = SystemCommon::runningCmd($back_cmds);  
這里需要注意一下文字的繪制命令順序,否則會(huì)出現(xiàn)沒(méi)有生效的問(wèn)題。
-font {$fontFamily} -draw "text 580,994 "{$qr_title}"" -fill "{$fontColor_qrtitlt}" -pointsize 20

解釋一下:

xc:[100x40!]: 設(shè)置畫(huà)布大小的一種簡(jiǎn)寫(xiě)方式,方括號(hào)里寫(xiě)入畫(huà)布寬高,注意要加 !

-fill "rgba(0, 0, 0, 0)":設(shè)置了文本的填充顏色

text 114,990: 對(duì)文字進(jìn)行定位

-font:指定字體

-pointsize:指定文本的字體大小

-draw:繪圖選項(xiàng),text 聲明繪制文本, 0,0 聲明文本距離圖片左上角的偏移值,繪制文本的格式為 text x,y string,當(dāng)然還可以繪制其他類型,諸如圓 ( circle )、折線 ( polyline )

繼續(xù)添加文字:

$back_img_shoptitle=$workDir."/btitle.jpg"; //要生成的圖片的路徑
$back_cmds_shoptitle="convert -draw "text 40,820 "{$drawtitone}"" -font {$fontFamily} -pointsize 32 -fill "{$fontColor}" -draw "text 40,866 "{$drawtittow}"" 
                    -font {$fontFamily} -pointsize 32 -fill "{$fontColor}" -draw "text 40,912 "{$drawtitthree}"" -font {$fontFamily} -pointsize 32 -fill "{$fontColor}"  
                    {$back_img} {$workDir}/btitle.jpg";
$result_back_cmds_shoptitle = SystemCommon::runningCmd($back_cmds_shoptitle);  

效果:
(白色的背景可能顯示不是很好)

5、拼接圖片

現(xiàn)在就可以在之前得到的圖片上拼接所需要的圖片了

 // 在底圖上合并商品主圖
$back_img_itemimg="/data/tmp/" . md5(microtime(true)).".jpg";  //要生成的圖片的路徑
$geometryX = "+" . 0; // 定位
$geometryY = "+" . 0; // 定位
$customPicPos = "northwest";
$back_cmds_itemimg = "convert {$back_img_shoptitle} {$workDir}/item_img_mag.jpg -gravity {$customPicPos} -geometry {$geometryX}{$geometryY} 
                    -compose over -composite -antialias -set colorspace sRGB -colorspace sRGB {$workDir}/result.jpg";
$result_back_cmds_itemimg = SystemCommon::runningCmd($back_cmds_itemimg); 

解釋一下:

-geometry: 設(shè)置文本在圖片里的排列方式 ( 類似 CSS 里的 align-items + justify-content ),center 表示水平垂直都居中,其他值還可以是:NorthWest, North, NorthEast, West, East, SouthWest, South, SouthEast,不記大小寫(xiě)

composite: 將一個(gè)圖片或多個(gè)圖片組合成新圖片。

這里是把{$workDir}/item_img_mag.jpg路徑的圖片繪制到之前繪制文字的圖片上$back_img_shoptitle,最終得到的圖片保存路徑是在{$workDir}/result.jpg

讓我們繼續(xù)操作圖片

// 合并二維碼 
$geometryXshop = "+" . 40;
$geometryYshop = "+" . 950;
$back_cmds_shopimg = "convert {$workDir}/result.jpg {$workDir}/shop_img_mag.jpg -gravity {$customPicPos} -geometry {$geometryXshop}{$geometryYshop} -compose over -composite -antialias -set colorspace sRGB -colorspace sRGB {$workDir}/result1.jpg";
$result_back_cmds_shopimg = SystemCommon::runningCmd($back_cmds_shopimg);  

// 合并店鋪圖標(biāo)
$geometryXqr = "+" . 520;
$geometryYqr = "+" . 784;
$back_cmds_qrimg = "convert {$workDir}/result1.jpg {$workDir}/qr_img_mag.jpg -gravity {$customPicPos} -geometry {$geometryXqr}{$geometryYqr} -compose over -composite -antialias -set colorspace sRGB -colorspace sRGB {$workDir}/result2.jpg";
$result_back_cmds_qrimg = SystemCommon::runningCmd($back_cmds_qrimg);  

效果:

發(fā)現(xiàn)圖片并不是我們預(yù)期的效果,拼接我們也設(shè)置了圖片的大小,但是沒(méi)有起作用,嘗試過(guò)不同的方案后決定在拼接之前把圖片統(tǒng)一放大為需要拼接的尺寸來(lái)操作。

6、放大拼接圖片尺寸

需要對(duì)多拼接的圖片都進(jìn)行操作

 // 看來(lái)需要先放大主圖
$item_img_m="convert -resize "750x766!" {$item_img_down} {$workDir}/item_img_mag.jpg";
$item_img_mag = SystemCommon::runningCmd($item_img_m);  
// 看來(lái)需要先放大二維碼
$shop_img_m="convert -resize 64x64 {$shop_img_down} {$workDir}/shop_img_mag.jpg";
$shop_img_mag = SystemCommon::runningCmd($shop_img_m);  
// 看來(lái)需要先放大店鋪圖標(biāo)
$qr_img_m="convert -resize 200x200 {$qr_img_down} {$workDir}/qr_img_mag.jpg";
$qr_img_mag = SystemCommon::runningCmd($qr_img_m);  
-resize 延伸解讀

IamgeMagick 提供了幾種符號(hào)來(lái)定義縮放

convert -resize "150x100!" goods.jpg thumbnail.jpg

convert -resize "150x100>" goods.jpg thumbnail.jpg

convert -resize "150x100<" goods.jpg thumbnail.jpg

!:不管圖片寬高如何,都縮放成 150x100 這樣的尺寸。

>:只有寬高均大于 150x100 的圖片才縮放成該尺寸 ( 按比例取最大值 ),小于的圖片不做處理。

<:與 > 功能相反

縮放對(duì)比

這樣的結(jié)果也不是我們需要的

只有convert -resize "750x766!" {$item_img_down} {$workDir}/item_img_mag.jpg這樣固定尺寸之后可以得到:

7、圖片轉(zhuǎn)換為 base64格式

我們最后同樣的以base64格式輸出給前端

$stdout = trim($result_back_cmds_qrimg["stdout"]);
$Return = array();
if (empty($stdout) || strpos($result_back_cmds_qrimg["stderr"], "identify") != false) {  // runningCmd執(zhí)行成功
    $dest_img = $workDir."/result2.jpg";
    // /*圖片轉(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["dest_img"]=$dest_img;
    $Return["type"]="success";
    $Return["msg"]=1;
    return $Return;
}
$Return["data"]="";
$Return["msg"]=2;
return $Return;

$workDir."/result2.jpg是我們最終的拼接圖片,至于文件夾下的其他圖片,可以選擇刪除。我們只要得到結(jié)果就好了。

(小姐姐拼接圖)

這次convert命令的介紹是以解讀整個(gè)方法的形式,對(duì)拼接的開(kāi)始進(jìn)行到結(jié)尾生成最終的圖片,希望對(duì)大家有力所能及的幫助。

歡迎光顧個(gè)人博客Blog

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

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

相關(guān)文章

  • 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
  • PHP遷移至Golang - 基礎(chǔ)

    摘要:但是,隨著微服務(wù)架構(gòu)的興起以及容器時(shí)代的到來(lái),這種情況又再次加劇。最重要的是,在微服務(wù)與容器領(lǐng)域有很好的基礎(chǔ),后期系統(tǒng)可完美實(shí)現(xiàn)微服務(wù)化與容器化。 1、Why Not PHP 使用PHP構(gòu)建的WEB程序,隨著業(yè)務(wù)發(fā)展到一定體量之后,都不得不面臨以下一些問(wèn)題: 業(yè)務(wù)功能不斷擴(kuò)張,如何避免某單一業(yè)務(wù)功能故障影響整體,維持系統(tǒng)健壯性 業(yè)務(wù)邏輯復(fù)雜度不斷上升,如何解耦與模塊化,降低系統(tǒng)復(fù)雜性...

    Kerr1Gan 評(píng)論0 收藏0
  • 【Laravel學(xué)習(xí) · 二】Laravel中借鑒Yii的params使用方法

    摘要:中的解決辦法面對(duì)什么的情況,在中有一個(gè)很好的方法。博客原文地址學(xué)習(xí)篇二在中借鑒的一些使用方法有很多地方都不完善,還望大家指出修正,如果你覺(jué)得這個(gè)對(duì)你有用,還請(qǐng)點(diǎn)個(gè)贊,謝謝 前段時(shí)間本來(lái)準(zhǔn)備學(xué)習(xí) Laravel 的,后來(lái)因?yàn)閾Q了工作的原因,又回到自己常用的 Yii 。現(xiàn)在要將 Laravel 重拾回來(lái),開(kāi)始學(xué)習(xí)這個(gè)被PHPer們喜愛(ài)的東西。 上一篇敢關(guān)于 Laravel 的文章 【Lar...

    liuhh 評(píng)論0 收藏0
  • 再見(jiàn)-那段8年的部落之旅,你好-即將開(kāi)始未知的堅(jiān)持:挖站否?

    摘要:很巧的是,我的第一個(gè)網(wǎng)站部落,就是在年月份注冊(cè)的域名,月開(kāi)始正式上線,也就是從那段時(shí)間開(kāi)始我實(shí)現(xiàn)了轉(zhuǎn)變。然而今天,我終于要和那一段曾經(jīng)的歲月說(shuō)一聲再見(jiàn)了,要和那段青春又美好的回憶說(shuō)再見(jiàn)了,要和陪伴著自己近三千多個(gè)日日夜夜的她說(shuō)再見(jiàn)了。6月注定是一個(gè)不平常的時(shí)間。寫(xiě)這篇文章時(shí)正好是全國(guó)高考結(jié)束后的第一天(2017年6月9日),對(duì)于參考完高考的人來(lái)說(shuō)他們即將面臨著人生的一次重要轉(zhuǎn)變。很巧的是,我...

    番茄西紅柿 評(píng)論0 收藏2637
  • 使用Ruby的十個(gè)理由

    摘要:既然這不是宗教,而是關(guān)于如何面對(duì)新的事物,我認(rèn)為我們應(yīng)該列出所有其他人認(rèn)為不使用來(lái)做開(kāi)發(fā)的理由。在下工作的不好這是一定的。流行度只是衡量使用率,社區(qū)活躍度的一個(gè)指標(biāo),用來(lái)幫助人們判斷技術(shù)的可用性,穩(wěn)定性和支持程度。不幸的是,人們混淆了和。這是一篇贊美 Ruby 的文章!!!看完再噴不遲? 請(qǐng)注意:這是一篇主觀意識(shí)的文章。它的目的并不是要說(shuō)服你使用或者不使用Ruby,或者其他任何技術(shù)。這...

    young.li 評(píng)論0 收藏0

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

0條評(píng)論

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