2011-09-16 46 views
21

Tôi có hình ảnh biểu trưng ở định dạng SVG và tôi tự hỏi liệu có cách tạo nhiều tệp png có kích thước khác nhau hay không.Chuyển đổi tệp SVG thành nhiều tệp PNG kích thước khác nhau

Ví dụ: tôi đặt 20 chiều rộng và chiều cao khác nhau và nó tạo 20 tệp PNG. Không sao nếu tôi phải làm 5 hình ảnh cùng một lúc.

Tôi đã cài đặt trình minh họa và không thể biết cách thực hiện điều này trên đó.

Cảm ơn tất cả sự giúp đỡ của bạn!

Trả lời

12

Tôi không biết về Illustrator, nhưng điều này sẽ dễ dàng khi sử dụng Inkscape command line options. Ví dụ: sử dụng Ruby:

$ ruby -e '[10,100,200].each { |x| `inkscape --export-png logo#{x}.png -w #{x} logo.svg` }' 
+0

Có điều đó sẽ hiệu quả, tôi phát hiện ra không có cách nào để thực hiện nó với Illustrator khiến tôi thất vọng vì vậy tôi phải thực hiện thủ công. – Mohammad

+4

Điều đó khiến tôi hoảng sợ ... Sử dụng dòng lệnh ruby ​​để gọi một chương trình dòng cmd 3 lần ... Có một cái tên cho sự điên rồ đó không? –

2

Hãy xem inkmake. Tôi thực sự làm công cụ đó chỉ cho hàng loạt xuất khẩu tập tin SVG để PNG vv trong các kích cỡ khác nhau. Nó được thiết kế bởi vì tôi muốn lưu trong Inkscape và sau đó chỉ cần chạy inkmake trong một thiết bị đầu cuối và nó sẽ xuất tất cả các tệp PNG tùy thuộc.

28

Câu trả lời được chấp nhận là tốt. Có sẵn official help on options. Cũng cơ bản Shell lệnh sẽ làm độc đáo ở đây:

for x in 10 100 200 ; do inkscape --export-png logo${x}.png -w ${x} logo.svg ; done 

Trên dòng lệnh trong cửa sổ sử dụng dòng này từ @avalancha trong các ý kiến ​​

for %x in (100 200 300) ; do inkscape --export-png logo%x.png -w %x logo.svg ; done 
+2

Đối với những người chỉ cần chuyển đổi một tệp, đây là một bản sao chép dễ dàng hơn: 'inkscape --export-png icon.png -w 128 logo.svg' – k0pernikus

+1

Đối với những người trên dòng lệnh trong cửa sổ, hãy sử dụng giá trị này cho% x trong (100 200 300); làm inkscape --export-png logo% x.png -w% x logo.svg; done' – avalancha

+0

@avalancha thích nó, bạn nên là một câu trả lời ở bên phải của riêng nó – Alveoli

14

Dưới đây là cách để làm cho nó nhanh hơn nhiều (3x cho tôi chỉ với 5 lần xuất trên SSD) bằng cách khởi chạy Inkscape chỉ một lần và cách xuất ảnh sang các thư mục khác nhau (như Android sử dụng):

#!/bin/sh 
# Converts the Inkscape icon file ic_launcher_web.svg to the launcher web & app png files. 

PROJECT="My Project Name" 
INPUT="source-assets/ic_launcher_web.svg" 
MAIN="${PROJECT}/src/main/" 
RES="${MAIN}res/" 
DRAWABLE="${RES}/drawable" 

inkscape --shell <<COMMANDS 
    --export-png "${MAIN}ic_launcher-web.png"   -w 512 "${INPUT}" 
    --export-png "${DRAWABLE}-mdpi/ic_launcher.png" -w 48 "${INPUT}" 
    --export-png "${DRAWABLE}-hdpi/ic_launcher.png" -w 72 "${INPUT}" 
    --export-png "${DRAWABLE}-xhdpi/ic_launcher.png" -w 96 "${INPUT}" 
    --export-png "${DRAWABLE}-xxhdpi/ic_launcher.png" -w 144 "${INPUT}" 
quit 
COMMANDS 

Đây là bash shell sc ript. Trên Windows, bạn có thể chạy nó trong MINGW32 (ví dụ GitHub's Git Shell) hoặc chuyển đổi nó sang một kịch bản shell Windows DOS. (Đối với một kịch bản DOS, bạn sẽ phải thay đổi COMMANDS "ở đây tài liệu" thành một cái gì đó DOS có thể xử lý. Xem heredoc for Windows batch? cho các kỹ thuật như echoing nhiều dòng văn bản vào một tập tin tạm thời.)

+0

Nơi viết lệnh này: S Tôi không hiểu. – salih

+1

@salih Kịch bản này được viết để chạy trong một vỏ giống Unix như MINGW trên Windows hoặc vỏ Mac OSX hoặc vỏ Linux. (Nó có thể được sửa đổi để chạy trong Windows DOS shell hoặc PowerShell.) Lưu văn bản này dưới dạng tệp văn bản, nói 'export.sh'. Chạy lệnh 'chmod ug + x export.sh' để đánh dấu tập lệnh là" có thể thực thi ". Sau đó, bất cứ khi nào bạn muốn xuất hình ảnh SVG của mình theo nhiều kích cỡ, hãy chạy tập lệnh qua './Export.sh' nếu nó nằm trong thư mục hiện tại hoặc chỉ đơn giản là' export.sh' nếu nó nằm trên PATH của bạn. – Jerry101

+0

Cảm ơn bạn đã giải thích tốt – salih

2

Nếu bạn chưa đã cài đặt imagemagick. Trên OSX, mà đòi hỏi rsvg hỗ trợ cụ thể:

brew install imagemagick --with-librsvg 

Bạn cũng cần inkscape, nếu không bạn có thể thấy rằng hình ảnh của bạn đi ra tất cả màu đen (trừ vùng trong suốt).

brew install homebrew/gui/inkscape 

Sau đó, bạn sẽ có thể chuyển đổi như sau:

convert -density 1536 -background none -resize 100x100 input.svg output-100.png 

Các 1536 là một cách giải quyết cho một cái gì đó tôi không thể tìm thấy câu trả lời tốt để. Trong các thử nghiệm của tôi, bỏ qua đối số -density tạo hình ảnh cực kỳ nhỏ. Việc chuyển đổi hình ảnh thành -size 100x100 tại -density 1024 sẽ cung cấp cho tôi hình ảnh đầu ra là 96x96, vì vậy những gì tôi đang thực hiện thay thế vượt quá mật độ và thay đổi kích thước xuống kích thước mục tiêu.

TL; DR sử dụng mật độ lớn hơn 1500 lần so với kích thước mục tiêu của bạn và đi từ đó.

Có nhiều cách để chạy hàng loạt lệnh đó. Đây là một trong vỏ:

for s in 10 100 200 ; do convert -density 1536 -background none -resize ${s}x${s} input.svg output-${s}.png ; done 
Các vấn đề liên quan