2014-03-13 58 views
3

我想要做的是使用ImageMagick在圖像上創建邊框。 這是一個簡單的過程,我可以用硬編碼值手動完成,但我希望它很聰明。 它需要做的是能夠簡單地定義你想要邊框的圖像,然後腳本將穿過,獲取圖像的尺寸,然後調整我對這些尺寸的邊界圖像的大小,頂部的邊界。使用批處理腳本獲得圖像尺寸(ImageMagick)

這樣做,從我的基本理解,我將不得不存儲圖像的寬度和高度作爲變量。我已經得到了(實際上得到的信息)最接近的是

identify "image.png" 

那吐出來,我需要的信息,但我需要的寬度/高度存儲到變量在後道工序使用它們。 我發現下面的代碼https://superuser.com/questions/323970/how-can-i-get-the-image-dimensions-of-a-targa-file-through-a-batch-script

(注:我的.bat文件被稱爲「imagecheck.bat」

identify -format "imagecheck2.bat %w %h" image.png > temp.bat 
temp.bat 

從什麼碼的海報說,它會得到的寬度和高度( %w和%h)from image.png,然後將它作爲變量存儲在imagecheck2.bat中,我可以以%1(%w)和%2(%h)的形式訪問它們。因此, ,在imagecheck2.bat裏面,我有

@echo off 
echo The parameters were: %1 and %2 
pause 

而且它打印出

The parameters were: and 

這應該是這麼簡單的事;任何想法我失蹤? 在此先感謝。

+0

爲什麼你有兩個'imagecheck'批處理文件?難道你只是拿掉'> temp.bat'並在你調用命令後立即輸出? – unclemeat

+0

上面的代碼只是從鏈接中拉出來的,然後我修改了一下,以便更像我所擁有的。 在ImageMagick的命令完成後,我無法獲得輸出。 – user2368229

+0

http://stackoverflow.com/questions/1555509/can-imagemagick-return-the-image-size –

回答

10

這是一種不使用任何輔助文件即可完成的方法。

for /f "tokens=1-2" %%i in ('identify -ping -format "%%w %%h" logo:') do set W=%%i & set H=%%j 
echo width: %W% 
echo height: %H% 

將「logo:」替換爲圖片的文件名。

也就是說,我強烈建議不要使用MS Batch,因爲程序越複雜,代碼就越可笑。

順便說一句,在識別命令中使用-ping標誌大大加快了操作速度,因爲它告訴識別不將整個圖像加載到內存中,只是足夠了解尺寸。

+0

你是一個天才!感謝這麼多的人 另外,我使用批處理的唯一原因,是因爲最終這一切都將被PHP和操作 1)它更容易至少寫這些批次(對我來說) 2)根據我的理解,執行一個system()調用來運行批處理文件要快得多,而不是每次調用每個系統()調用的ImageMagick命令,這些都是我需要的一些操作。 另外,由於PHP的字符串限制,我無法通過PHP的system()函數獲取分層/屏蔽,但它通過批處理文件中的命令正常工作。 – user2368229

+2

啊。在這種情況下,我建議先放棄Batch,然後放棄PHP ;-) Thx進行投票。 – retroj

+0

哈哈如果這不是爲了工作目的,我會高興地放棄PHP – user2368229

2

而不是使用ImageMagick,您可以簡單地將寬度和高度拉出PNG。它們位於已知位置,每個網絡字節順序都是一個4字節整數(最重要的字節在前)。從文件開始的偏移量是

signature: bytes 0-7 
IHDR length: bytes 8-11 
"IHDR":  bytes 12-15 
width:  bytes 16-19 
height:  bytes 20-23 
+0

它是不同的順序爲每個不同的文件類型是它? PNG是主要的文件類型,但位圖,jpegs和targa的蹤跡非常可能(不幸的是)。 – user2368229

+0

這個答案是特定於PNG的,因爲你的問題似乎是。對於各種類型的圖像,「識別」將找到尺寸,如retroj的答案中所述。 –

+0

它確實做了我所問的,那是我的不好;儘管如此,仍然非常有用謝謝 :) – user2368229