Làm cách nào để nhúng nhiều kích cỡ trong tệp .ico?


16

Tôi đã thấy các biểu tượng .ico có hình ảnh khác nhau cho nhiều kích cỡ, ví dụ. 16x16, 32x32, 48x48, 128x128, 256x256. Trên Windows, làm cách nào tôi có thể tạo tệp biểu tượng hỗ trợ nhiều kích thước theo cách này, với điều kiện tôi có các tệp .ico hiện có cho mỗi kích thước? Xin lưu ý rằng tôi hy vọng sẽ làm điều này với hơn 200 tệp, vì vậy thực hiện nó từ cmd sẽ là lý tưởng.

Câu trả lời:


28

ImageMagick (Windows / Mac / Linux) chứa một công cụ dòng lệnh được gọi là convertcó thể được sử dụng cho nhiều thứ, bao gồm đóng gói nhiều hình ảnh trong một biểu tượng:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

Lệnh trước lấy 5 hình ảnh PNG và kết hợp chúng thành một tệp .ico.

Không giống như các câu trả lời khác, phương pháp này có thể dễ dàng được sử dụng trong các tập lệnh bó để tự động tạo một số tệp biểu tượng. Trong một trong các dự án của tôi, tôi có một hình ảnh vector đơn (SVG) và sử dụng Inkscape để tạo png có kích thước khác nhau, tiếp theo là convertđể tạo một biểu tượng chứa. Đây là một ví dụ rút gọn (trong tập lệnh bash):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

1
Man, tôi cảm thấy như tôi học được một cách mới để sử dụng ImageMagick convertmỗi khi tôi nhìn vào nó. Cảm ơn câu trả lời!
Thatipi

Làm thế nào để bạn làm ngược lại? Chuyển đổi a .icothành nhiều PNG, dựa trên kích thước nó chứa?
Flimm

2
@Flimm convert favicon.ico favicon.pngtạo favicon-0.png, favicon-1.pngv.v. cho mọi biểu tượng trong khung. Nếu bạn muốn biết kích thước của hình ảnh, hãy sử dụng identifylệnh trên tệp png.
Rob W

Bạn có thể sử dụng hình ảnh riêng convert <icon.png> -resize 64x64thay vì inkscape
kumarharsh 17/2/2016

Tôi đã thêm vào -dither Nonelệnh convert vì chuyển đổi mặc định thành 256 màu đã thêm một số nhiễu vào biểu tượng của tôi
James Roth

7

Lệnh tốt hơn cho ImageMagick:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

1
Đây là một câu trả lời tuyệt vời thực sự. Sử dụng lệnh này để kiểm tra xem tệp đã thực sự chuyển đổi chưa:identify out.ico
kumarharsh 17/2/2016

5

Bạn có thể làm điều này miễn phí trong GIMP . Có hướng dẫn ngắn gọn để làm điều này ở đây .

Để trích:

  1. Mở hình ảnh của bạn trong Gimp
  2. Làm cho hình vuông của bạn
  3. Thay đổi kích thước lớp của bạn thành hình ảnh
  4. Chia tỷ lệ lớp thành kích thước lớn nhất trong tệp .ico của bạn như 64 pixel
  5. Nhân đôi layer
  6. Quy mô lớp trùng lặp đến kích thước tiếp theo
  7. Tiếp tục sao chép / chia tỷ lệ cho tất cả các kích thước bạn muốn trong tệp .ico của bạn
  8. Lưu dưới dạng .ico

Trong trường hợp của bạn, bạn có thể bắt đầu với hình ảnh lớn nhất và thu nhỏ lại cho mỗi hình ảnh trùng lặp hoặc bạn chỉ có thể thêm các lớp mới và nhập hình ảnh biểu tượng cụ thể mà bạn muốn vào lớp đó.


Làm thế nào để bạn hỗ trợ nhiều độ sâu màu bằng phương pháp này?
Random832

Không thể nói rằng tôi đã phải làm điều đó một cách cá nhân, nhưng bài đăng này nói rằng GIMP sẽ bật lên hộp thoại cài đặt màu cho mỗi lớp khi lưu.
techturtle

Bạn phải chọn xuất trong Gimp 2.8.16 nhưng nhiều năm sau, tôi có thể thú nhận có một hộp thoại cho cài đặt màu khi bạn xuất ico.
Broots Waymb

1

Đây là câu trả lời được chấp nhận bởi Rob W , với một sự thích ứng tầm thường để tránh phải gõ các kích thước (16, 32, v.v.) nhiều lần:

#!/bin/bash
files=()
for size in 16 32 48 128 256; do
    inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
    files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink  "${files[@]}"

Dưới đây logo.svgđại diện cho đầu vào (nguồn) hình ảnh, từ đó chúng ta tạo ra các file nhỏ hơn các kích thước mong muốn ( 16.png, 32.png, vv) mà chúng tôi sau đó kết hợp vào file icon đầu ra (kết quả), favicon.ico. Bạn có thể thay đổi danh sách kích thước trong dòng 3, ví dụ: "16 24 32 48 64 72 128" và convertlệnh sẽ tự động điều chỉnh phù hợp, bởi vì tập lệnh này sử dụng kỹ thuật được mô tả bởi G-Man trong câu trả lời của anh ấy ở đây để xây dựng một mảng tên tập tin. Và cuối cùng, chúng tôi hủy liên kết (loại bỏ) các tệp PNG được tạo trong dòng 4, sử dụng lại tên tệp.


Tôi đã nhận thấy rằng lệnh:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(tương đương với câu được trình bày trong câu trả lời của user400747 ) thực sự thu nhỏ hình ảnh bitmap (chất lượng bị mất) và lớp nền bị mất độ trong suốt.


1
(1) Về cơ bản, bạn đã sao chép câu trả lời của người khác. Nếu bạn đã làm điều đó và không có gì nữa (vâng, đôi khi mọi người làm điều đó), tôi sẽ đánh dấu câu trả lời của bạn để xóa. Tôi không làm điều đó, bởi vì bạn đã thực hiện một cải tiến nhỏ. Nhưng, bất cứ khi nào bạn sao chép tác phẩm của người khác, bạn nên thừa nhận tác giả gốc bằng tên và bằng cách liên kết với thông tin bạn trích dẫn. (2) Xin đừng nói những điều như thế này, đây là cách linh hoạt hơn mà không cần giải thích ý của bạn. Tiết (Cont'd)
Scott

(Tiếp theo) Nhiều (3) Bạn phải luôn trích dẫn các biến shell trừ khi bạn có lý do chính đáng để không và bạn chắc chắn rằng bạn biết bạn đang làm gì. Trên thực tế, trong tất cả các ví dụ tôi đã thấy về các tập lệnh sử dụng biến shell mà không trích dẫn chúng, ví dụ của bạn (tức là Rob Wiến ) có thể là một trong những điều tồi tệ nhất. Tuy nhiên, tốt hơn là trích dẫn các biến. (4) Tại sao bạn sử dụng unlinkthay vì phổ biến hơn rm?
Scott

1

Tệp bó Windows, tạo nhiều tệp .PNG có kích thước và hợp nhất chúng thành một tệp .ICO:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

Nếu bạn không cần các tệp .PNG, bạn có thể xóa (hoặc xóa) chúng bằng cách del FILEhoặc bạn lưu tất cả các PNG trong một thư mục bạn có thể xóa (sau %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Hy vọng nó sẽ giúp được ai đó. :)


0

Theo ý kiến ​​của tôi, Axialis IconMaker là giải pháp tốt nhất cho các vấn đề về biểu tượng. Có bản dùng thử 30 ngày có thể sẽ giải quyết vấn đề cho bạn.

Tôi đã sử dụng Axialis trong nhiều năm và trong rất nhiều dự án, tôi có thể chứng thực rằng đó là một sản phẩm thực sự đáng giá. Bạn sẽ không cần 30 ngày! Hà!


0

Bạn phải sử dụng chương trình chỉnh sửa biểu tượng của bên thứ ba vì MSPaint chỉ hỗ trợ một biểu tượng duy nhất cho mỗi tệp. Có một cặp vợ chồng của chủ đề ở đây với các khuyến nghị cho biểu tượng biên tập, một số miễn phí, một số thương mại.

Khi bạn giải quyết trình chỉnh sửa biểu tượng, phương pháp thêm định dạng biểu tượng sẽ khác nhau nhưng thường tương tự nhau (bạn nhấp vào nút hoặc chọn mục menu để thêm định dạng mới). Hầu hết các chương trình sẽ cho phép bạn nhập tệp biểu tượng khi thêm định dạng / kích thước biểu tượng, nhưng hầu hết cũng cho phép bạn tạo định dạng / kích thước mới từ tệp hiện có bằng cách định cỡ lại.

Nếu bạn chọn sử dụng tùy chọn tạo từ hiện có khi thêm định dạng / kích thước mới, hãy đảm bảo tạo chúng từ định dạng biểu tượng lớn nhất bạn đã có vì nó sẽ có nhiều dữ liệu nhất để thuật toán định cỡ lại hoạt động với . Ngoài ra, hãy đảm bảo sử dụng phiên bản có độ trong suốt khi tạo biểu tượng XP / Vista vì hầu hết các chương trình không tuyệt vời trong việc tạo kênh alpha từ đầu.


Tôi cần phải làm điều này đến hơn 200 biểu tượng. Bất kỳ trình soạn thảo biểu tượng nào có thể chạy mọi thứ theo đợt?
Thatipi

1
Tôi không nhớ đã từng thấy một trình soạn thảo biểu tượng với chế độ hàng loạt. Bạn có thể thử sử dụng trình chỉnh sửa hình ảnh ở chế độ hàng loạt, nhưng tôi không chắc liệu có bất kỳ trình chỉnh sửa hình ảnh nào có hỗ trợ biểu tượng đa định dạng hay không (ít nhất là không phải từ chế độ dòng lệnh / chế độ hàng loạt). Nếu có, nó sẽ là ImageMagick. Ngoài ra, bạn nên thêm yêu cầu về khối lượng và chế độ hàng loạt cho câu hỏi.
Synetech

0

Bạn có thể thử Matthias Benkmann của png2ico . Nó là miễn phí và có thể đóng gói nhiều kích thước png vào một tệp ico duy nhất.


Nó có một số hạn chế thú vị, mặc dù:Width must be multiple of 8 and <256. Height must be <256.
Francois Botha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.