2017-10-10 19 views
0

我可以通過ImageMagick的圖像分割成多個文件:ImageMagick的 - 圖象分成多個的base64字符串,而不是文件

convert -pointsize 240 -font "DejaVuSans-Bold.ttf" label:"Test" -crop 25%x33.333% output_%d.png

我也可以轉換成一個單一的形象爲Base64字符串:

convert -pointsize 240 -font "DejaVuSans-Bold.ttf" label:"Test" PNG:- | base64

但是,有沒有辦法分成多個的base64字符串,沒有必要在磁盤上創建任何文件?

+0

咦?你希望完全結束什麼? 12個圖像作爲base64全部並置在一起? –

+0

好吧,我想將圖像裁剪成多個部分,但是採用base64格式。所以這應該是12個base64字符串的個人12個圖像。 –

回答

1

我認爲這是沿着你的意思,但它看起來像一個混亂給我!

convert -pointsize 240 label:"Test" -crop 50% -write MPR:all -delete 0-3 \ 
    MPR:all -delete 1-3 -write inline:png: -delete 0 \ 
    MPR:all -delete 0,2-3 -write inline:png: -delete 0 \ 
    MPR:all -delete 0,1,3 -write inline:png: -delete 0 \ 
    MPR:all -delete 0-2 -write inline:png: null: 

它產生一大堆base64的東西,包括文本圖像的四個象限。我懶得把所有的數字都計算出來,十二分之二,但是希望你能看看我做了什麼。

MPR「Magick Pixel Register」它基本上是一個能夠容納多個圖像的命名塊。所以50%寬度和50%高度的初始作物將4幅圖像放入稱爲all的MPR中。然後,我選擇性地回憶MPR並刪除我不感興趣的那些,然後將我感興趣的那個作爲內聯base64映像寫入。

我想你可以通過sedtr通過Base64和每個字符串的結尾對=拆分,然後用結果來填充一個數組,所以你可以訪問每個象限爲數組元素 - 但我避風港沒有做到這一點,因爲每次我做一些有用的事情時,OP回來並告訴我他正在使用Windows ...

+0

非常複雜,但確實有效。謝謝!其實我試圖在Linux上找到服務器端解決方案,所以不要擔心Windows。 –

1

您可以看看您的ImageMagick版本是否包含使用此命令編碼爲base64的委託...

convert -list format | grep -i inline 

如果輸出顯示僞格式「IN LINE」與‘RW +’,那麼像這樣的命令應該努力做你想做的......

convert -pointsize 240 label:"Test" -crop [email protected] inline:png:output_%02d.b64 

,將創造12的base64文件,每個文件由裁剪與輸入圖像產生的12瓦「-crop 4x3 @」。

還原圖像用這樣的命令

convert inline:output_*.b64 output_%02d.png 

我有IM 6.7.7,可以閱讀「內聯」僞格式,但不會寫。我有IM版本6.9.8和7.0.7,可以讀取和寫入「INLINE」格式。因此,這是否會爲你工作,將取決於你目前的IM和版本,代表們在遵守。

編輯補充...

如果你不想寫入到磁盤的所有文件的base64 ,它變得更加複雜和凌亂。馬克·塞切爾的回答應該指向你正確的方向。這裏有一個類似的方法......

convert -pointsize 240 label:"Test" -crop [email protected] \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) -delete 0 \ 
    \(-clone 0 -write inline:png:- \) null: 

這應該裁剪輸入圖像劃分爲4×3 12瓦,然後輸出它們作爲12個單獨的64位編碼的文本字符串。

+0

OP特別想避免創建磁盤文件... –

+0

我可能誤解了這個問題,意味着他不想將中間PNG文件寫入磁盤。我編輯了我的回覆以反映我的誤解。 – GeeMack

+0

我認爲這個更新的答案更容易編程。所以我可能會更喜歡這種方式在最終的實施。 –

相關問題