2012-07-10 19 views
21

मैं ImageMagick का उपयोग कर अपने विंडोज़ अनुप्रयोग गतिशील रूप से (एसवीजी फ़ाइल से) के लिए .ico आइकन बनाना चाहता हूं। मैं उसको कैसे करू?ImageMagick के साथ विंडोज आईसीओ फाइल बनाने के लिए पकाने की विधि?

आइकन के लिए माइक्रोसॉफ्ट lists various color depth and size requirements। ImageMagick में -depth और -colors विकल्प हैं, लेकिन मुझे यकीन नहीं है कि इस मामले में उन्हें सही तरीके से उपयोग कैसे करें।

Additionaly, यह Vista+ supports 256x256 hi-res icon जैसा दिखता है .ico में जो एम्बेडेड (चाहिए? चाहिए?) एक संपीड़ित पीएनजी हो सकता है। मैं Windows XP आइकन और इस नए Vista आइकन को एक .ico फ़ाइल में "शामिल" कैसे करूं?

+0

यदि आप सोच रहे हैं, तो यह * एप्लिकेशन * आइकन (जिसे .exe पर चिपकाया गया है) है। – Linas

उत्तर

26

ImageMagick उनके दस्तावेज में इस बात के लिए एक नुस्खा है, को देखने के FavIcon Web Page Link Thumbnail

अनिवार्य रूप से आप निम्नलिखित चलाएँ:

convert image.png -bordercolor white -border 0 \ 
      \(-clone 0 -resize 16x16 \) \ 
      \(-clone 0 -resize 32x32 \) \ 
      \(-clone 0 -resize 48x48 \) \ 
      \(-clone 0 -resize 64x64 \) \ 
      -delete 0 -alpha off -colors 256 favicon.ico 

आप संशोधित कर सकते हैं यह बड़ा संकल्प के रूप में आवश्यक शामिल करने के लिए और सीमा जैसी चीजों को बदलने के लिए, पारदर्शिता सेटिंग्स इत्यादि

+4

यदि आप '-alpha off' के बजाय '-alpha remove' का उपयोग करते हैं तो वास्तव में आपको' -बॉर्डरकलर व्हाइट-बॉर्डर 0' 'को छोड़ने में सक्षम होना चाहिए। – sschuberth

+1

लेखक को एसवीजी के साथ ऐसा करना चाहता है। जैसा कि एसवीजी पर इस कमांड का उपयोग करके मेरे उत्तर में बताया गया है, परिणामस्वरूप आइकन की गुणवत्ता को पूरी तरह से नष्ट कर देगा क्योंकि छविमैजिक केवल रास्टरराइजिंग के बाद एसवीजी का आकार बदलता है। –

+0

@MalcolmMacLeod हाँ आप सही हैं, इस विधि का उपयोग करते हुए एसवीजी से सीधे परिवर्तित करने से एसवीजी से कनवर्ट करने के लिए – RobV

9

यह ImageMagick की तरह अकेले नहीं लगता है यह कर सकते हैं के रूप में यह एक समझदार तरह से आकार बदलने एसवीजी संभाल नहीं करता है (लेकिन इसके बजाय केवल रास्टराइजिंग जो एक भयंकर परिणाम पैदा करता है के बाद एसवीजी आकार बदलता है)

इंकस्केप का उपयोग कर ऐसा करने के लिए तक रूपांतरण हालांकि यह संभव प्रतीत होता है, उदाहरण के लिए निम्नलिखित एक लाइनर आप सभी आइकन आकार के साथ एक प्रयोग करने योग्य आइकन देना चाहिए:

mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=("${res[@]/#/temp/$f}"); resm=("${resm[@]/%/.png}"); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp; 

ऊपर हालांकि आप 8 और 4 बिट प्रतीक फ़ाइल के भीतर नहीं देंगे (मुझे लगता है कि ये केवल पुराने विंडोज़ संस्करण हैं की आवश्यकता होती है अब समर्थित नहीं है) यदि आपको उनकी आवश्यकता हो तो इसे करने के लिए थोड़ा और काम करना संभव होना चाहिए।

+0

http://stackoverflow.com/a/27886286/2079345 – chiliNUT

3

FAQ से मानक नुस्खा है, msdn link में उल्लिखित सभी संकल्पों के लिए संशोधित है (उन लोगों को छोड़कर "अतिरिक्त आकार ...") (अन्य जवाब सभी प्रस्तावों वांछित)

convert input.png -bordercolor white -border 0 (-clone 0 -resize 16x16) (-clone 0 -resize 24x24) (-clone 0 -resize 32x32) (-clone 0 -resize 40x40) (-clone 0 -resize 48x48) (-clone 0 -resize 64x64) (-clone 0 -resize 256x256) -delete 0 -alpha off -colors 256 output.ico 
6

मैं मैल्कम समाधान साफ ​​नहीं था, एक बग तय है, और इसलिए आप में tiff2icns चला सकते हैं भी स्क्रिप्ट उत्पादन झगड़े बनाया OSX।

#! /bin/bash 
# converts the passed-in svgs to tiff and ico 

if [[ $# -eq 0 ]]; then 
    echo "Usage: $0 svg1 [svg2 [...]]" 
    exit 0 
fi 

temp=$(mktemp -d) 
declare -a res=(16 24 32 48 64 128 256 512) 
for f in $*; do 
    mkdir -p $temp/$(dirname $f) 
    for r in "${res[@]}"; do 
     inkscape -z -e $temp/${f}${r}.png -w $r -h $r $f 
    done 
    resm=("${res[@]/#/$temp/$f}") 
    resm=("${resm[@]/%/.png}") 
    for filetype in ico tiff; do 
     convert "${resm[@]}" ${f%%.*}.$filetype 
    done 
done 
rm -rf $temp 
1

विंडोज उपयोगकर्ताओं के लिए hnasarat के जवाब को संशोधित करना। इंकस्केप और इमेजमैजिक को Chocolatey का उपयोग करके स्थापित करने का सबसे आसान तरीका है और फिर बैच फ़ाइल में निम्न चलाएं। (यह रूप में लचीला अन्य उत्तर के रूप में आप सिर्फ एक svg में पास नहीं है, लेकिन यह सब पसंदीदा आइकन Favicon Cheat Sheet में सिफारिश बाहर पंप।

@ECHO off 

IF "%1"=="" (
    ECHO You must provide an svg file 
    EXIT /b 
) 

IF NOT EXIST favicons MD favicons 

SET "sizes=16 24 32 48 57 64 72 96 120 128 144 152 195 228 256 512" 

FOR %%s IN (%sizes%) DO (
    inkscape -z -e favicons/favicon-%%s.png -w %%s -h %%s %1 
) 

convert favicons/favicon-16.png favicons/favicon-24.png favicons/favicon-32.png favicons/favicon-48.png favicons/favicon-64.png favicons/favicon.ico 
6
convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico 

http://imagemagick.org/script/command-line-options.php#define

+1

मैं आकार सूची में 32 और 64 जोड़ दूंगा - तो मुझे लगता है कि यह सभी विंडोज ओएस के लिए बिल्कुल सही है : –

+1

मुझे '-compress ज़िप' के साथ या बिना किसी अंतर में कोई फर्क नहीं पड़ता, हालांकि –

+0

"convert.im6: चौड़ाई या ऊंचाई सीमा से अधिक है" - पहले इनपुट छवि को 256 × 256 पिक्सल का आकार बदलकर तय किया गया है। लेकिन मूल पीएनजी में पारदर्शी हिस्से सफेद हो गए। – Smylers

1

बैश एक लाइनर में logo.svg कन्वर्ट करने के लिए logo.ico, इंकस्केप का उपयोग कर विभिन्न आकारों में PNG छवियों में से प्रत्येक के निर्यात करने के लिए:

eval convert \ 
    '<(inkscape -e /dev/stderr logo.svg -w '{16,32,64,128,256}' 2>&1 > /dev/null)' \ 
    logo.ico 

आकारों की सूची को समायोजित करें जैसा आप चाहें।

Malcolm MacLeod's answer से प्रेरित, लेकिन स्पष्ट पाश और अस्थायी फ़ाइलों से परहेज किया। छवि डेटा में समाप्त:

stderr और पुनर्निर्देशन stdout ("/ dev/stdout के रूप में सहेजा बिटमैप") पर इंकस्केप की सफलता संदेश से बचने के लिए है।