Làm thế nào để tạo thủ công tệp icns bằng cách sử dụng irshil?


106

Khi xác thực ứng dụng của mình, tôi gặp lỗi này:

gói ứng dụng không chứa biểu tượng ở định dạng ICNS, chứa cả a 512x512512x512@2xảnh.

Tôi sử dụng để tạo các biểu tượng icns bằng ứng dụng Img2icns và cho đến hôm nay nó luôn hoạt động bình thường. Nhưng bây giờ tôi đang gặp lỗi đó và không có cách nào để làm cho nó hoạt động. Tôi đã cố gắng đặt hai tệp PNG lại với nhau ( 512x5121024x1024) trong Img2icns nhưng tôi luôn gặp lỗi đó. Tôi cũng đã cố gắng làm theo các hướng dẫn trong Hướng dẫn về giao diện con người OS X của Apple nhưng khi tôi cố gắng tạo bộ biểu tượng, tôi gặp lỗi đầu cuối này:

-bash: lỗi cú pháp gần mã thông báo không mong muốn 'dòng mới'

Tôi không giỏi lắm với các lệnh đầu cuối nên có thể tôi đang làm sai. Tôi đã viết:

iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>

Nếu ai đó có thể giúp nó sẽ được đánh giá rất cao. Cảm ơn, Massy.


Tôi xây dựng một ứng dụng mà kết thúc tốt đẹp iconutil để làm điều này dễ dàng: hobbyistsoftware.com/icontool
Nhầm lẫn Vorlon

Câu trả lời:


63

Kiểm tra các hướng dẫn sau ( liên kết ):

Sử dụng illowil để tạo tệp icns theo cách thủ công

Công iconutilcụ dòng lệnh chuyển đổi iconsetcác thư mục thành các tệp icns có độ phân giải cao, sẵn sàng triển khai. (Bạn có thể tìm thấy tài liệu đầy đủ cho công cụ này bằng cách nhập man iconutilvào Terminal.) Sử dụng công cụ này cũng nén kết quảicns tệp , vì vậy bạn không cần thực hiện nén bổ sung.

Để chuyển đổi một tập hợp các biểu tượng thành một tệp icns

Nhập lệnh này vào cửa sổ Terminal:

iconutil -c icns <iconset filename>

đâu <iconset filename>là đường dẫn đến thư mục chứa tập hợp các biểu tượng bạn muốn chuyển đổi sang icns. Đầu ra được ghi vào cùng vị trí với iconset file, trừ khi bạn chỉ định tệp đầu ra như được hiển thị:

iconutil -c icns -o <icon filename> <iconset filename>

Nói cách khác, bạn cần thay thế <iconset filename>bằng đường dẫn:

/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset

Vì đường dẫn chứa khoảng trắng, bạn cần sử dụng dấu ngoặc kép, ví dụ:

iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset"

Lệnh này sẽ hoạt động bình thường.


2
Tuy nhiên, bạn có thể không cần sử dụng iconutil. Bạn chỉ có thể thêm bộ biểu tượng vào dự án của mình và để Xcode chuyển đổi nó cho bạn như một phần của quá trình xây dựng. Đó là bao gồm trong ngay trước phần (rất ngắn): developer.apple.com/library/mac/documentation/GraphicsAnimation/...
Peter Hosey

@Anne: ngoại trừ lệnh irshil chỉ được bao gồm trong các phiên bản hệ điều hành không sử dụng tệp ICNS ... Không có tình yêu cho chúng tôi, những người sử dụng OS10.6.8 V1.1 ... nó thậm chí còn tệ hơn 'đường của chúng ta hoặc đường cao tốc' cho các nhà phát triển hơn là người dùng.
Henrik Erlandsson

@Anne: Điều đó hiệu quả ... cảm ơn rất nhiều! (cũng cảm ơn vì đã đặt câu hỏi của tôi đúng cách). Hòa bình, Massy
Xanh

@HenrikErlandsson: Tất cả các phiên bản của Mac OS X đều sử dụng tệp .icns, tất cả đều trở về 10.0.
Peter Hosey

10
Các tệp sau phải tồn tại: icon_16x16.png, icon_16x16@2x.png, icon_32x32.png, icon_32x32@2x.png, icon_128x128.png, icon_128x128@2x.png, icon_256x256.png, icon_256x256@2x.png. Các tệp @ 2x nên được lưu trữ ở 144 pixel mỗi inch trong khi các tệp khác phải được lưu trữ ở 72 pixel mỗi inch.
carmin

284

Đây là tập lệnh để chuyển đổi png 1024x1024 (có tên là "Icon1024.png") thành tệp icns được yêu cầu. Lưu nó vào một tệp có tên "CreateICNS.src" trong thư mục nơi tệp png của bạn sau đó nằm trong terminal "cd" vào cùng một thư mục và nhập "source CreateICNS.src" để gọi nó:

mkdir MyIcon.iconset
sips -z 16 16     Icon1024.png --out MyIcon.iconset/icon_16x16.png
sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_16x16@2x.png
sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_32x32.png
sips -z 64 64     Icon1024.png --out MyIcon.iconset/icon_32x32@2x.png
sips -z 128 128   Icon1024.png --out MyIcon.iconset/icon_128x128.png
sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_128x128@2x.png
sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_256x256.png
sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_256x256@2x.png
sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_512x512.png
cp Icon1024.png MyIcon.iconset/icon_512x512@2x.png
iconutil -c icns MyIcon.iconset
rm -R MyIcon.iconset

3
Tuyệt vời. tôi đặt Icon1024.png trên máy tính để bàn, và chỉ cần chạy mã của bạn và nó làm tất cả
logic

2
Có thể là kịch bản nhỏ hoàn hảo này đã bị phá vỡ trong El Capitan? Đã nâng cấp máy Mac của tôi lên 10.11.3 và tập lệnh này hiện trả về "lỗi: Định dạng hình ảnh không được sắp xếp" rồi "/Users/IconScript/MyIcon-osx.iconset:error: Biến thể có tên 'biểu tượng' không chứa tài nguyên hình ảnh." thì "MyIcon-osx.iconset: error: Không tạo được ICNS." Đã thử cùng một tập lệnh và tệp .png trên máy Mac không được cập nhật lên El Capitan và nó hoạt động ở đó như mọi khi ... = (
RanLearns

1
Vâng @Henry, tôi chỉ xóa tên thư mục để thử và làm cho nhận xét gọn gàng hơn, tôi đang chạy nó trong Terminal từ bên trong thư mục chứa tập lệnh src và các biểu tượng. Điều duy nhất khác so với trước đây là El Capitan vs Yosemite ... Tôi thực sự đã sử dụng tập lệnh trước khi cập nhật hệ điều hành thành công và sau đó ngay sau khi cập nhật (trong cùng một thư mục, cùng một lệnh Terminal) và bây giờ nó trả về lỗi đó. Bạn đã thành công với nó trên El Capitan chưa?
RanLearns 10/02/16

3
Những điều quan trọng cần lưu ý: Tên tệp hình ảnh biểu tượng của bạn phải bắt đầu bằng "icon_". Hình ảnh phải có kênh alpha. Bạn có thể thêm kênh alpha bằng ImageMagick nếu cần convert abc.png -define png:color-type=6 abc_with_alpha.png.
David Grayson

1
Chúa ơi. xây dựng một ứng dụng điện tử và xử lý các biểu tượng đã là một vấn đề khó khăn. tất cả các hướng dẫn trên blog đều trỏ đến các tiện ích trực tuyến đã lỗi thời. script đơn giản của bạn ở đây trên stackerflow vừa tạo nên ngày của tôi. cảm ơn bạn!
nelsonenzo

26

Mặc dù việc sử dụng tất cả các loại tập lệnh để chuyển đổi PNGhình ảnh độ phân giải cao thành vô số bản sao có độ phân giải thấp khác nhau có vẻ hữu ích (và thực sự là như vậy), người ta không nên quên rằng loại thay đổi kích thước tự động này sẽ hiển thị hình ảnh không hoàn hảo .

Giảm độ phân giải - làm mờ biểu tượng!

Ý tôi là, tôi cũng thích imagemagick, nhưng nó không phải là công cụ thích hợp cho nhiệm vụ này!

Thay vào đó, bạn nên luôn yêu cầu một biểu trưng ở định dạng vectơ nào đó từ nhà thiết kế của bạn, chẳng hạn như trong SVG. Với điều này trong tay, bạn có thể chuẩn bị thủ công PNGcác tệp hoàn hảo ở tất cả các độ phân giải cần thiết và sau đó tạo một tệp duy nhất.icns tệp , điều này sẽ làm cho biểu tượng ứng dụng của bạn trông đẹp trên mọi màn hình, từ iPhone SE giá rẻ đến một số màn hình Retina cao cấp mới nhất iMac. Bạn có thể sử dụng Photoshop, GIMP hoặc bất kỳ công cụ nào khác mà bạn chọn để tạo các PNG này.

Từ Nguyên tắc giao diện con người mới nhất của Apple kể từ năm 2020, bạn nên chuẩn bị các PNGtệp sau :

+---------------------+--------------------+--------------+
|      filename       | resolution, pixels | density, PPI |
+---------------------+--------------------+--------------+
| icon_16x16.png      | 16x16              |           72 |
| icon_16x16@2x.png   | 32x32              |          144 |
| icon_32x32.png      | 32x32              |           72 |
| icon_32x32@2x.png   | 64x64              |          144 |
| icon_128x128.png    | 128x128            |           72 |
| icon_128x128@2x.png | 256x256            |          144 |
| icon_256x256.png    | 256x256            |           72 |
| icon_256x256@2x.png | 512x512            |          144 |
| icon_512x512.png    | 512x512            |           72 |
| icon_512x512@2x.png | 1024x1024          |          144 |
+---------------------+--------------------+--------------+

Sau khi tất cả các tệp PNG được chuẩn bị, hãy đặt chúng vào một số thư mục có .iconsetphần mở rộng ( Logos.iconsetví dụ) và thực hiện như sau từ Terminal:

iconutil --convert icns Logos.iconset

Nếu không có lỗi nào sau khi thực hiện lệnh này, thì tất cả các tệp đã được xử lý đúng cách và bạn có Logos.icnstệp trong cùng một thư mục, chứa tất cả các biểu trưng sắc nét đẹp mắt cho ứng dụng của bạn, phù hợp với mọi màn hình hiện đại.


16

Có một mô-đun nút dòng lệnh thực hiện tất cả công việc chuyển đổi tệp PNG thành thư mục tập biểu tượng:

npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns

9
Không còn được hỗ trợ. :(
jamescampbell 18/02/18

13

Các lệnh này (được nhập trong Terminal) đã hoạt động để tôi chuyển đổi tệp icns cũ sang định dạng mới:

cd Folder_With_Icns_File
iconutil -c iconset Your_Icon_Name.icns 
rm Your_Icon_Name.icns 
iconutil -c icns Your_Icon_Name.iconset
rm -R Your_Icon_Name.iconset

Cập nhật

Các -ctham số để iconutil không còn được hỗ trợ. Sử dụng --convertthay thế:

cd Folder_With_Icns_File
iconutil --convert iconset Your_Icon_Name.icns 
rm Your_Icon_Name.icns 
iconutil --convert icns Your_Icon_Name.iconset
rm -R Your_Icon_Name.iconset

1
Cảm ơn vì đã hiển thị cái này, nhờ cái này mà tôi đã có thể đảo ngược từ icns để lấy pngs! :)
Noitidart

9

Nhận xét thêm, khi bạn tạo tệp .icns, bạn cần phải đổi tên tất cả các tệp pic có tiền tố "icon_ ", nếu không, tôi sẽ không thành công với thông báo lỗi: ".iconset: error: Không tạo được ICNS." mà không phải là thông tin ở tất cả.


7

Tương tự như @Henry (nhận xét ở trên) nhưng lấy đối số là tên tệp PNG và xuất ICNS có cùng tên.

LƯU Ý: Tên tệp PNG dự kiến ​​chỉ có 1 điểm để tách biệt phần mở rộng, tức là xpto.png.

Vì vậy, hãy lưu mã bên dưới vào một tệp có tên "CreateICNS.src" trong thư mục chứa tệp png của bạn.

MÃ:

IFS='.' read -ra ADDR <<< "$1"
ICONSET=${ADDR[0]}.iconset
mkdir $ICONSET
sips -z 16 16     $1 --out $ICONSET/icon_16x16.png
sips -z 32 32     $1 --out $ICONSET/icon_16x16@2x.png
sips -z 32 32     $1 --out $ICONSET/icon_32x32.png
sips -z 64 64     $1 --out $ICONSET/icon_32x32@2x.png
sips -z 128 128   $1 --out $ICONSET/icon_128x128.png
sips -z 256 256   $1 --out $ICONSET/icon_128x128@2x.png
sips -z 256 256   $1 --out $ICONSET/icon_256x256.png
sips -z 512 512   $1 --out $ICONSET/icon_256x256@2x.png
sips -z 512 512   $1 --out $ICONSET/icon_512x512.png
cp $1 $ICONSET/icon_512x512@2x.png
iconutil -c icns $ICONSET
rm -R $ICONSET

CÁCH SỬ DỤNG:

Sau đó, trong terminal, "cd" vào cùng một thư mục và nhập:

source CreateICNS.src {PNG filename}

trong đó {PNG filename} là tên tệp PNG của bạn, tức là xpto.png.

Nếu tệp của bạn có tên abc.png, bạn sẽ sử dụng:

source CreateICNS.src abc.png

Tuyệt vời! Chết đơn giản :) có lẽ biến nó thành .sh / script sẽ làm cho nó nhiều hơn :) Cảm ơn!
Gutemberg Ribeiro

6

Tôi đã viết một tập lệnh bash để tạo icns từ tệp svg:

#!/usr/bin/env bash 
sizes=(16 32 64 128 256 512)
largfile='icon_512x512@2x.png'
if [ ! -f "$largfile" ]; then
  convert -background none -resize 1024x1024 "$1" "$largfile"
fi
for s in "${sizes[@]}"; do
  echo $s
  convert -background none -resize ${s}x${s} "$largfile" "icon_${s}x$s.png"
done

cp 'icon_32x32.png'     'icon_16x16@2x.png'
mv 'icon_64x64.png'     'icon_32x32@2x.png'
cp 'icon_256x256.png'   'icon_128x128@2x.png'
cp 'icon_512x512.png'   'icon_256x256@2x.png'

mkdir icon.iconset
mv icon_*x*.png icon.iconset
iconutil -c icns icon.iconset

Đảm bảo rằng bạn đã cài đặt imagemagick với hỗ trợ librsvg, trên mac:

brew install imagemagick --with-librsvg

Kịch bản này đã phục vụ tôi khá tốt.


Cập nhật

Để xử lý triệt để hơn, tôi đã tạo một công cụ dòng lệnh (được viết bằng Swift) để tạo AppIcon.appiconsetvới bố cục và định dạng chính xác:

https://github.com/kindlychung/genicon


5

Tôi đã cấu trúc lại tập lệnh của @ Henry để làm cho nó trông đẹp hơn:

#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r in 'n' '' '((n+1))' '@2x'; do
    for n in $(seq 4 9 | grep -v 6); do
        p=$((2**$m)); q=$((2**$n))
        OUT="$DIR/icon_${q}x${q}${r}.png"
        sips -z $p $p $1 --out $OUT
    done
done
iconutil -c icns $DIR
rm -frv $DIR

Cập nhật

Các -ctham số để iconutil không còn được hỗ trợ. Sử dụng -—convertthay thế:

#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r in 'n' '' '((n+1))' '@2x'; do
    for n in $(seq 4 9 | grep -v 6); do
        p=$((2**$m)); q=$((2**$n))
        OUT="$DIR/icon_${q}x${q}${r}.png"
        sips -z $p $p $1 --out $OUT
    done
done
iconutil -—convert icns $DIR
rm -frv $DIR

4
Phiên bản gốc rất đơn giản và người ta có thể tái tạo quy trình theo cách thủ công trong bất kỳ trình bao nào.
Denis Barmenkov

1
Nếu bạn thích làm mọi thứ theo cách thủ công, bạn không cần máy tính.
dardo82

5

Chết đơn giản .png 👉 .icns

  1. Tải xuống IconMaker.app - Nó chỉ là một .applescript sẽ không cắn
  2. Kéo và thả .png của bạn vào IconMaker.app bạn vừa tạo.

Thông tin thêm : http://eon.codes/blog/2016/12/06/Creating-an-app-icon/

Bản cập nhật cao sierra iconutil hiện nghiêm ngặt hơn về kích thước .png nguồn. Thông tin thêm về điều này trong bài đăng trên blog sau khi nhảy. ✌️


3

Khi xác thực ứng dụng của mình, tôi gặp lỗi này:

gói ứng dụng không chứa biểu tượng ở định dạng ICNS, chứa cả hình ảnh 512x512 và 512x512 @ 2x.

Tôi không giỏi lắm với lệnh đầu cuối và vì vậy có thể tôi đang làm sai. Tôi đã viết:

iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>

Đối với một điều, như tôi đã đề cập trong một bình luận về câu trả lời của Anne, bạn có thể không cần sử dụng irshil. Bạn có thể chỉ cần thêm bộ biểu tượng vào dự án của mình và để Xcode chuyển đổi nó cho bạn như một phần của bản dựng.

Dù bằng cách nào, đây có thể là vấn đề của bạn:

Tôi đã cố gắng đặt hai tệp PNG togheter (512x512 và 1024x1024)… nhưng tôi luôn gặp lỗi.

Không có kích thước 1024 x 1024 điểm. Phần tử 1024 x 1024 pixel (là 1024 điểm trước Mountain Lion) hiện được sử dụng cho 512 x 512 điểm @ 2x.

Tệp PNG của bạn phải được đặt tên thích hợp: icon_512x512@2x.png


3

Icon Composer phiên bản 2.2 cũ hơn của Apple hoạt động tốt, bạn chỉ cần mở .ICNS trong đó, nhấn nút 1024x1024 và thêm hình ảnh của bạn.


tôi không thể nói cho người đặt câu hỏi ban đầu, nhưng câu trả lời này chính xác là những gì tôi cần. cảm ơn!
pestophagous

3
Tài liệu của Apple cho biết "Lưu ý: Không sử dụng Icon Composer — nó không thể tạo các tệp icns có độ phân giải cao.". Đó là, các biểu tượng @ 2x không thể được thực hiện theo cách đó.
Cầu Đất Sét

Icon Composer dường như hoạt động tốt, nó được vận chuyển riêng từ trang web dành cho nhà phát triển Apple như một phần của gói Công cụ đồ họa cho Xcode. Xem thêm tại đây .
Michiel Kauw-A-Tjoe

2

Mã shell của @ dardo82 là tốt và hoạt động. Đây là một cái đơn giản hơn trong sh (cho tất cả * nix's) và nhanh hơn (giống như nó thực sự quan trọng):

#!/bin/sh
#   This runs silent, be as verbose as you wish
NAME=$(basename ${1} .png)
DIR="${NAME}.iconset"
mkdir -p ${DIR}
for i in 16 32 128 256 512 ; do
    x=""
    for p in $i $(($i+$i)) ; do
        sips -z $p $p ${1} --out "${NAME}.iconset/icon_${i}x${i}${x}.png"
        x="@2x"
    done
done >/dev/null  # /dev/null in lieu of a "-s" silent option
iconutil -—convert icns $DIR
rm -r $DIR

Cảm ơn cho sự thay đổi về kịch bản của tôi, bây giờ tôi thậm chí không chắc chắn lý do tại sao tôi đã sử dụng zsh
dardo82

1

Đây là một hàm chủ yếu dựa trên ví dụ của Henry (có thể hữu ích trong ~/.bash_profile):

mkicns() {
    if [[ -z "$*" ]] || [[ "${*##*.}" != "png" ]]; then
        echo "Input file invalid"
    else
        filename="${1%.*}"
        mkdir "$filename".iconset
        for i in 16 32 128 256 ; do
            n=$(( i * 2 ))
            sips -z $i $i "$1" --out "$filename".iconset/icon_${i}x${i}.png
            sips -z $n $n "$1" --out "$filename".iconset/icon_${i}x${i}@2x.png
            [[ $n -eq 512 ]] && \
            sips -z $n $n "$1" --out "$filename".iconset/icon_${n}x${n}.png
            (( i++ ))
        done
        cp "$1" "$filename".iconset/icon_512x512@2x.png
        iconutil -c icns "$filename".iconset
        rm -r "$filename".iconset
    fi
}

Cách sử dụng :

$ mkicns "filename.png"  # double-quote if spaces exist in filename

Tạo 10 kích thước từ 16x16đến 512x512@2x; chỉ chấp nhận hình ảnh đầu vào ở .pngđịnh dạng.


1

Chạy iconutil -c icns Icon.iconset

Ghi chú

  • Icon.iconset là một thư mục
  • Tên bắt đầu bằng chữ thường icon_
  • Khi bạn nhìn thấy Icon.icnshình ảnh chính xác, bạn biết nó hoạt động

nhập mô tả hình ảnh ở đây


Tại sao 3x? Apple không yêu cầu nó.
Neurotransmitter

1

Có 2 nhiệm vụ:
- tạo 10 tệp icns chính xác
- nhận dự án Xcode của bạn để sử dụng chúng một cách chính xác

Vì tôi đã gặp vấn đề kéo dài hàng giờ với cả hai nhiệm vụ này và cũng không thích khi tôi không 'nhìn thấy' những gì đang xảy ra, đây là một con đường cho những người thận trọng:

Tạo 10 tệp icns đúng:
Tôi đã sử dụng tập lệnh ở trên từ Henry: Nó vẫn hoạt động cho HighSierra và Xcode 9.2, bao gồm cả lệnh 'c'.
Tệp icns mà tôi nhận được, chỉ xuất hiện dưới dạng một kích thước biểu tượng trong Finder / Quicklook và trong Xem trước chỉ hiển thị 8/10 kích thước.
Vì vậy, tôi đã sử dụng terminal, đi cùng với cd vào thư mục của mình và sử dụng lệnh: irshil -c iconet (icns filename) trên tệp icns vừa tạo để hoàn nguyên tệp icns trở lại thư mục iconet, và - lo & behold - tôi có thể thấy 10 tệp biểu tượng mới tạo của tôi. Bằng cách sử dụng Quick look trên thư mục bộ biểu tượng (và sử dụng chế độ toàn màn hình để có thể phóng to chúng bằng thanh trượt), tôi có thể kiểm tra rằng tất cả các kích thước đang thực sự trông rất tốt.

Ngoài ra: chúng trông đẹp hơn những nỗ lực thay đổi kích thước của tôi với PSE, rất có thể là do tôi không dành thời gian để chơi với tất cả các tùy chọn thay đổi kích thước trong PSE. Nếu bạn sử dụng PSE, hãy đảm bảo rằng các tệp png của bạn được lưu mà không có cấu hình màu. Ngoài ra, thú nhận sự thiếu hiểu biết của tôi, đối với tôi tệp 256x256 @ 2 giống với tệp 512x512 - cả hai đều ở 72dpi. Cố gắng làm theo các nhận xét 144 dpi ở trên không hiệu quả với tôi.

Làm cho dự án Xcode của bạn sử dụng chúng một cách chính xác:
Đầu tiên, tôi đã xóa tất cả những nỗ lực không có kết quả của mình trong Xcode và cam kết một phiên bản sạch vào kho lưu trữ git (điều mà thông minh, trước tiên sẽ là cam kết một phiên bản sạch - trước khi tôi điên cuồng khởi động biểu tượng bổ sung odyssee).
Tôi cũng đảm bảo rằng trong tệp info.plist không có con trỏ nào được liên kết với mục nhập 'tệp biểu tượng' và trong cài đặt Dự án chung của tôi, tôi đã chọn AppIcon cho Biểu tượng ứng dụng.
Sau đó, tôi đã thêm một danh mục asset.asset và trong danh mục tài sản một Thư mục AppIcon 'Biểu tượng ứng dụng và Hình ảnh khởi chạy' mới cho hệ điều hành.
Sau đó, tôi sao chép (kéo và thả với tùy chọn được nhấn) từ thư mục bộ biểu tượng từng tệp ảnh png vào AppIcon Spaceholder tương ứng. Vì vậy, một lần nữa, tôi có thể thấy những gì đang xảy ra. Xcode đã chuyển đổi nó thành các tệp icns hoặc có thể - như thư mục bộ biểu tượng của tôi bắt nguồn từ một thư mục icns - các định dạng tệp đã được chấp nhận.

Sau đó, lưu trữ và xác thực và sẽ không có lỗi khi tải lên hoặc xác thực.


Định dạng! Câu trả lời của bạn có thể tốt, nhưng không thể đọc được. Sử dụng đoạn văn và dấu xuống dòng.
Nic3500, 23/02/18

0

Tôi cần cái này, nhưng cho CMake. Tôi cũng muốn có tùy chọn cấp cho nó một SVG.

Đây là ý chính: https://gist.github.com/Qix-/f4090181e55ea365633da8c3d0ab5249

Và mã CMake:

# LICENSE: CC0 - go nuts.

# Hi :) This is what I used to generate the ICNS for my game, Tide.
# Both input formats (SVG vs PNG) work just fine, but in my experience
# the SVG came out with noticeably better results (although PNG wasn't
# a catastrophe either). The logo for the game was simple enough that
# SVG was indeed an option.

# To use:
#
#    make_icns( INPUT "path/to/img.{svg,png}"
#               OUTPUT ICNS_PATH )
#
# Then add it as a custom target or use it as a
# dependency somewhere - I give you that option.
#
# For example:
#
#    add_custom_target( my-icns ALL DEPENDS "${ICNS_PATH}" )
#
# For the associated utilities:
#
# - PNG: brew install imagemagick
# - SVG: brew cask install inkscape
#
# Enjoy!

function (make_icns_from_png)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    find_program (
        convert_exe
        NAMES "convert" "convert.exe"
        DOC "Path to ImageMagick convert")
    if (NOT convert_exe)
        message (FATAL_ERROR "Could not find ImageMagick's 'convert' - is ImageMagick installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size}x${size}" "${ipath}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size2x}x${size2x}" "${ipath2x}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns_from_svg)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    set (CMAKE_FIND_APPBUNDLE NEVER) # otherwise, it'll pick up the app bundle and open a shit ton of windows
    find_program (
        inkscape_exe
        NAMES "inkscape" "inkscape.exe"
        DOC "Path to Inkscape"
        PATHS "/usr/local/bin" "/usr/bin")

    message (STATUS "Inkscape path: ${inkscape_exe}")

    if (NOT inkscape_exe)
        message (FATAL_ERROR "Could not find Inkscape - is it installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath}" -w ${size} -h ${size} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath2x}" -w ${size2x} -h ${size2x} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    if (NOT ARG_INPUT)
        message (FATAL_ERROR "INPUT is required")
    endif ()

    if (NOT IS_ABSOLUTE "${ARG_INPUT}")
        get_filename_component (ARG_INPUT "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    endif ()

    if (NOT EXISTS "${ARG_INPUT}")
        message (FATAL_ERROR "INPUT does not exist: ${ARG_INPUT}")
    endif ()

    file (RELATIVE_PATH ARG_INPUT "${CMAKE_CURRENT_SOURCE_DIR}" "${ARG_INPUT}")

    get_filename_component (ARG_INPUT_EXT "${ARG_INPUT}" EXT)
    if ("${ARG_INPUT_EXT}" STREQUAL ".png")
        make_icns_from_png (INPUT "${ARG_INPUT}" OUTPUT child_output)
    elseif ("${ARG_INPUT_EXT}" STREQUAL ".svg")
        make_icns_from_svg (INPUT "${ARG_INPUT}" OUTPUT child_output)
    else ()
        message (FATAL_ERROR "INPUT must refer to a .png or .svg, but a ${ARG_INPUT_EXT} was provided")
    endif ()

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${child_output}" PARENT_SCOPE)
    endif ()
endfunction ()

-1

Xin chào, vì nhu cầu của tôi, tôi đã tạo một giọt hoạt động trong việc kéo và thả các biểu tượng một mình hoặc các biểu tượng để tìm kiếm trong một thư mục (Tôi giới hạn trong các thư mục vì việc tìm kiếm trên Tập của tất cả các biểu tượng có thể mất rất nhiều thời gian). Vì vậy, trong thao tác kéo và thả, bạn có thể thả các thư mục hoặc ứng dụng, bất kỳ thứ gì có thể chứa biểu tượng. Bộ biểu tượng được tạo ra mang tên của biểu tượng gốc, nó được đặt trong một thư mục "/ aaaicones" và đường dẫn của biểu tượng. Ví dụ trong thư mục "/ aaaicones nếu bạn gửi xcode.app, bạn sẽ thấy" /aaaicones/Application/xcode.app/access.iconset "và /aaaicones/Application/xcode.app/access.icns (biểu tượng được tạo lại) ở đó là một tệp văn bản nơi nó được theo dõi đường dẫn đầy đủ của các biểu tượng và đường dẫn đến ví dụ về bộ biểu tượng tương ứng "/Application/xcode.app/Contents/Application/I Kinh nguyệt.

on open draggedItems
    set input to draggedItems
    set fich to draggedItems


    set media to {}

    set theInfo to {}

    set n to "0"
    repeat with currentItem in draggedItems
        set dirchoisi to POSIX path of fich
        if ".icns" is not in dirchoisi then
            if "Volumes" is not in dirchoisi then

                set origi to do shell script "echo   /aaaicones" & dirchoisi
                set fich to do shell script "echo " & fich & " | xxd -p -c 100000 | sed 's#3a#2f#g' | xxd -r -p | sed 's#" & dirchoisi & "#" & "/aaaicones" & dirchoisi & "#g' | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p"
                tell application "Finder"
                    if exists (folder fich) then
                        set nn to "0"
                        repeat with nn from 1 to 5
                            set origi to do shell script "echo  " & origi & "/" & " | sed 's#//#" & nn & "/" & "#'"
                            set fich to do shell script "echo " & fich & " | sed 's#:aaaicones*.*#" & origi & "#'" & " | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p"

                            if not (exists folder (fich as Unicode text)) then
                                try
                                    set origi to do shell script "echo  " & origi
                                    exit repeat
                                end try
                            end if
                        end repeat
                    end if
                end tell
                tell application "Finder"
                    if not (exists folder (fich as Unicode text)) then
                        do shell script "mkdir -p -m 0777 " & quoted form of origi
                    end if
                end tell
                try
                    set theInfo to do shell script "find " & (quoted form of dirchoisi) & " -name *.icns "
                end try




                set AppleScript's text item delimiters to return

                set theList to text items of theInfo

                set AppleScript's text item delimiters to ""

                set n to count theList
                repeat with i from 1 to n
                    if "Volumes" is not in item i of theList then
                        set end of media to item i of theList
                    end if
                end repeat
                set n to count media
                set cheminicns to do shell script " > " & quoted form of (origi & "aalisticones.txt") & " |  chmod 777 " & quoted form of (origi & "aalisticones.txt")
                set cheminicns to do shell script "ls " & quoted form of (origi & "aalisticones.txt")

                tell application "Finder"
                    set letext to (POSIX file cheminicns as alias)
                    set label index of letext to 2
                end tell



                repeat with i from 1 to n

                    set hdd to item i of media
                    try

                        set input to do shell script "echo   " & hdd & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' "
                        do shell script "echo   " & quoted form of input & " >>" & quoted form of cheminicns
                        set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' "

                        do shell script "cp -f " & quoted form of input & " " & quoted form of origi
                        set input to do shell script "iconutil -c iconset  " & quoted form of (origi & png)
                        do shell script "echo   " & quoted form of (origi & png) & " | sed 's#.icns#.iconset#' >>" & quoted form of cheminicns
                    end try
                end repeat
                tell application "Finder"
                    if exists (folder fich) then
                        open fich
                    end if
                end tell

            end if
        else

            set input to do shell script "echo   " & dirchoisi & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' "
            set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' "
            set origi to do shell script "echo " & quoted form of ("/aaaicones/aIconeseule/" & input) & " | sed 's#/Volumes/##; s#" & quoted form of png & "##'"
            do shell script "mkdir -p -m 0777 " & quoted form of origi
            do shell script "echo   " & quoted form of input & " >>" & quoted form of origi & "aalisticones.txt"

            do shell script "cp -f " & quoted form of input & " " & quoted form of origi
            set input to do shell script "iconutil -c iconset  " & quoted form of (origi & png)
            do shell script "echo   " & quoted form of (origi & png) & " >>" & quoted form of origi & "aalisticones.txt"
        end if
    end repeat
end open
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.