วิธีการแปลง SVG สแควร์เป็น ICO ทุกขนาด?


24

ฉันวาดไอคอนใน InkScape และต้องการส่งออกไปยังไฟล์ ICO ที่จะรวม sprites สำหรับการแก้ปัญหาที่สมเหตุสมผลทั้งหมด (16x16, 32x32, ... 256x256 และอื่น ๆ ) วิธีนี้สามารถทำได้ (โดยไม่ต้องใช้ซอฟต์แวร์ขนาดใหญ่และมีราคาแพงเช่น Photoshop, CorelDraw และอื่น ๆ )?


2
การค้นหาอย่างรวดเร็วบอกฉันว่าไม่มีวิธีส่งออกแม้แต่ ICO เดียวจาก InkScape แต่มีคำแนะนำมากมายเกี่ยวกับวิธีการทำเช่นนั้นด้วยซอฟต์แวร์เพิ่มเติมฟรีเช่น GIMP คุณตรวจสอบตัวเลือกเหล่านั้นหรือไม่ หากพวกเขาไม่ได้ผลสำหรับคุณคุณสามารถบอกได้ไหมว่าทำไม
usr2564301

@RadLexus สิ่งที่ฉันได้ลองคือเครื่องมือออนไลน์จำนวนหนึ่งและทั้งหมดเท่าที่ฉันสามารถเข้าใจได้นั่นหมายถึงการสร้าง ICOns ขนาดเดียว
อีวาน

5
ดังนั้นคุณต้องการที่จะรู้วิธีการสร้าง ICO หลายขนาด? ลองใช้ตัวเลือกในคำตอบ Stack Overflow นี้: stackoverflow.com/questions/4354617/… (ค้นอีกครั้งโดยการสืบค้นง่ายๆของ Google ... )
usr2564301

1
มีส่วนขยาย Inkscapeซึ่งดูเหมือนว่าจะส่งออกเป็นไฟล์icoแต่ฉันไม่มีเวลาที่จะลองถ้ามันทำงาน
เปาโล Gibellini

หากคุณพบข้อใดข้อหนึ่งด้านล่างเพื่อตอบคำถามของคุณโปรดทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้
DᴀʀᴛʜVᴀᴅᴇʀ

คำตอบ:


24

คุณสามารถใช้ImageMagick ได้ทันที:

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
ทำไมความหนาแน่นนั้น
naught101

1
ฉันไม่รู้ฉันเพิ่งคัดลอกมาจากที่อื่น
heltonbiker

@ naught101 นี่คือเอกสารสำหรับการตั้งค่าสถานะความหนาแน่น - แม้ว่าดูเหมือนว่าจะเป็นขั้นตอนที่ไม่จำเป็นเลยเว้นแต่ว่าคุณกำลังทำสิ่งที่เฉพาะเจาะจงมากกับขนาดภาพ, dpi และการแปลงภาพระดับกลางของภาพ imagemagick.org/script/command-line-options.php#density
CreationTribe

7
ใช้convert -background none icon.svg -define icon:auto-resize icon.icoเพื่อเก็บพื้นหลังโปร่งใส
Robert Hume

2
magick convert -background none icon.svg -define icon:auto-resize icon.icoทำงานให้ฉัน
intotecho

15

โซลูชันบรรทัดคำสั่ง:

1) ส่งออก SVG ของคุณเป็น PNG ด้วย InkScape

2) ปรับขนาดภาพ PNG นี้ตามขนาดที่คุณต้องการด้วย ImageMagick:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3) แปลงภาพ PNG เป็น ICO:

magick convert 16.png 32.png 48.png icon.ico

4) ตรวจสอบให้แน่ใจว่า ICO ของคุณมีทุกอย่าง:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000

คุณยังสามารถใช้แบทช์หรือไฟล์เชลล์แบบง่าย ๆ เพื่อให้งานง่ายขึ้น
เปาโล Gibellini

3
มันจะดีกว่าหรือไม่ (แม้ว่าจะซับซ้อนกว่านี้เล็กน้อย) ในการส่งออกขนาด png มากมายจาก SVG โดยตรงแทนที่จะปรับขนาด PNG แบบ rasterized แล้ว
heltonbiker

1
ในกรณีที่คนอื่นอยากรู้อยากเห็น "... " ไม่ใช่ตัวอักษร เพราะมันหมายถึงขนาดไฟล์ png อื่น ๆ เพื่ออัดเข้าไปในไฟล์ favicon.ico
Nostalg.io

@ Nostalg.io คำพูดที่ดีขอบคุณ! ฉันแก้ไขคำตอบ
philippe_b

5

รุ่นทุบตี ...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

การใช้งาน: ./favicon.sh your-square-svg-file.svg

ต้องการ: inkscape imagemagick optipng (ตัวเลือก) จากผู้จัดการแพ็คเกจ

ฉันพบว่ามันง่ายกว่าในการสร้างสิ่งนี้ใหม่สำหรับเชลล์ bash เนื่องจาก Win10 และ Inkscape ไม่ได้เข้ากัน สิ่งนี้ได้รับการทดสอบภายในระบบย่อยของ Windows สำหรับ Linux แต่ควรใช้กับ Mac ได้เช่นกัน

ที่ใช้อ้างอิงนี้เพื่อเลือกขนาดที่ผมได้รับการดูแลเกี่ยวกับ: https://github.com/audreyr/favicon-cheat-sheet ปรับsizeอาร์เรย์ตามความต้องการเฉพาะของคุณ


4

ฉันอยากจะแนะนำวิธีการนี้:

1) สร้างสคริปต์เพื่อส่งออก SVG ไปยังขนาดที่ต้องการ ฉันได้เขียนสคริปต์. bat นี้เพื่อช่วยฉันสร้างไอคอน Android

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

หมายเหตุ :

  • ที่กำหนด% Inkscape% var ควรจะเพียงพอไปยังเส้นทาง Inkscape ติดตั้งของคุณ
  • สคริปต์สะท้อนคำสั่งส่งออกทั้งหมดไปยังไฟล์ temp เพื่อการจัดการที่ดีขึ้นของกระบวนการ inkscape cli "shell" ยอมรับคำสั่งเพิ่มเติมโดยใช้อินสแตนซ์เดียวแทนที่จะวางไข่อินสแตนซ์ต่อคำสั่ง

ด้วยพารามิเตอร์นี้ Inkscape จะเข้าสู่โหมดเชลล์บรรทัดคำสั่งแบบโต้ตอบ ในโหมดนี้คุณพิมพ์คำสั่งที่พรอมต์และ Inkscape ดำเนินการโดยไม่ต้องเรียกใช้สำเนาใหม่ของ Inkscape สำหรับแต่ละคำสั่ง คุณลักษณะนี้มีประโยชน์ส่วนใหญ่สำหรับการเขียนสคริปต์และเซิร์ฟเวอร์ใช้: มันไม่เพิ่มความสามารถใหม่ แต่ช่วยให้คุณสามารถปรับปรุงความเร็วและข้อกำหนดหน่วยความจำของสคริปต์ใด ๆ ที่เรียก Inkscape ซ้ำเพื่อดำเนินงานบรรทัดคำสั่ง (เช่นการส่งออกหรือการแปลง) แต่ละคำสั่งในโหมดเชลล์จะต้องเป็นบรรทัดคำสั่ง Inkscape ที่ถูกต้อง แต่ไม่มีชื่อโปรแกรม Inkscape เช่น "file.svg --export-pdf = file.pdf" ( ดูคู่มือ inkscape )

2) เพิ่มสคริปต์แปลงข้างต้นลงในคำตอบ philippe-bซึ่งรวม PNG ที่สร้างขึ้นทั้งหมดไว้ในไฟล์ ICO ไฟล์เดียว

3) อีกทางเลือกหนึ่งลบ PNG ที่ส่งออกทั้งหมดเนื่องจากไม่จำเป็นต้องใช้อีกต่อไป


1

เว็บไซต์นี้เป็นเว็บไซต์ของฉันสำหรับการสร้าง favicon เนื่องจากมีไอคอนสำหรับเพิ่มไปยังหน้าจอหลักสำหรับอุปกรณ์ส่วนใหญ่ (Windows, MacOS, Android, iOS) https://realfavicongenerator.net/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.