İconutil kullanarak elle icns dosyaları nasıl oluşturulur?


107

Uygulamamı doğrularken şu hatayı alıyorum:

uygulama paketi, hem a hem de 512x512bir 512x512@2xgörüntü içeren ICNS biçiminde bir simge içermez .

Img2icns uygulaması ile icns simgeleri yapmak için kullanıyorum ve bugüne kadar her zaman düzgün çalıştı. Ama şimdi bu hatayı alıyorum ve bunu çalıştırmanın bir yolu yok. Img2icns'de iki PNG dosyasını bir araya ( 512x512ve 1024x1024) koymaya çalıştım ama her zaman bu hatayı alıyorum. Ayrıca Apple'ın OS X İnsan Arabirimi Kılavuzundaki talimatları izlemeye çalıştım, ancak simge kümelerini yapmaya çalıştığımda şu terminal hatasını alıyorum:

-bash: beklenmedik belirteç 'yeni satır' yakınında sözdizimi hatası

Terminal komutları konusunda pek iyi değilim, bu yüzden belki de yanlış bir şeyler yapıyorum. Yazdım:

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

Biri yardım edebilseydi çok takdir edilecektir. Teşekkürler Massy.


Bunu kolaylaştırmak için iconutil'i saran bir uygulama geliştirdim: hobbyistsoftware.com/icontool
Confused

Yanıtlar:


63

Aşağıdaki talimatları kontrol edin ( bağlantı ):

Manuel olarak bir icns Dosyası Oluşturmak için iconutil'i kullanın

iconutilKomut satırı aracı dönüştürür iconsetkurulum uyumu, yüksek çözünürlüğe klasörleri dosyaları icns. ( man iconutilTerminal'e girerek bu araç için eksiksiz dokümantasyonu bulabilirsiniz .) Bu aracı kullanmak ayrıca elde edilen icnsdosyayı da sıkıştırır , böylece ek sıkıştırma yapmanız gerekmez.

Bir dizi simgeyi bir icns dosyasına dönüştürmek için

Bu komutu Terminal penceresine girin:

iconutil -c icns <iconset filename>

<iconset filename>dönüştürmek istediğiniz simge kümesini içeren klasörün yolu nerede icns. Çıktı, iconset filegösterildiği gibi bir çıktı dosyası belirtmediğiniz sürece , ile aynı konuma yazılır :

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

Başka bir deyişle, <iconset filename>yol ile değiştirmeniz gerekir :

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

Yol boşluklar içerdiğinden, çift tırnak kullanmanız gerekir, örneğin:

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

Bu komut düzgün çalışmalıdır.


2
Muhtemelen kullanmana gerek yok iconutil. Sadece ikon setini projenize ekleyebilir ve Xcode'un onu sizin için yapının bir parçası olarak dönüştürmesine izin verebilirsiniz. Bu, hemen önceki (çok kısa) bölümde ele alınmıştır: developer.apple.com/library/mac/documentation/GraphicsAnimation/…
Peter Hosey

@Anne: iconutil komutunun yalnızca ICNS dosyalarını kullanmayan işletim sistemi sürümlerine dahil olması dışında ... OS10.6.8 V1.1 kullanan bizleri sevmek yok ... bu daha da kötü bir 'bizim yolumuz veya otoyolumuz' geliştiriciler için kullanıcılardan daha fazla.
Henrik Erlandsson

@Anne: Bu işe yaradı ... çok teşekkürler! (ayrıca sorumu doğru şekilde belirlediğiniz için teşekkürler). Barış, Massy
Mavi

@HenrikErlandsson: Mac OS X'in tüm sürümleri .icns dosyalarını kullanır, 10.0'a kadar.
Peter Hosey

10
Aşağıdaki dosyalar mevcut olmalıdır: 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. @ 2x dosyaları inç başına 144 piksel, diğerleri ise inç başına 72 piksel olarak depolanmalıdır.
carmin

286

İşte 1024x1024 png ("Icon1024.png" adlı) gerekli icns dosyasına dönüştürmek için bir komut dosyası. Bunu, png dosyanızın bulunduğu klasördeki "CreateICNS.src" adlı bir dosyaya kaydedin ve ardından aynı klasöre "cd" terminaline kaydedin ve çağırmak için "kaynak CreateICNS.src" yazı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
Süper. Icon1024.png'yi masaüstüne koydum ve sadece kodunuzu çalıştırın ve hepsini yaptı
Logic

2
El Capitan'da bu mükemmel küçük senaryonun kırılmış olması mümkün mü? Mac'imi 10.11.3'e yükselttim ve bu komut dosyası artık "hata: Desteklenmeyen görüntü formatı" ve ardından "/Users/IconScript/MyIcon-osx.iconset:error:" simge "adlı değişken, görüntü kaynağı içermiyor." ardından "MyIcon-osx.iconset: hata: ICNS oluşturulamadı." El Capitan'a güncellenmemiş bir Mac'te aynı komut dosyasını ve .png dosyasını denedim ve orada her zamanki gibi çalıştı ... = (
RanLearns

1
Evet @Henry, yorumu daha temiz hale getirmek için klasör adlarını kaldırıyordum, src komut dosyasını ve simgelerini içeren klasörün içinden Terminal'de çalıştırıyorum. Öncekinden farklı olan tek şey El Capitan vs Yosemite ... İşletim sistemini başarıyla güncellemeden önce ve ardından güncellemeden hemen sonra (aynı klasörde, aynı Terminal komutları) komut dosyasını tam anlamıyla kullandım ve şimdi bu hatayı döndürüyor. El Capitan'da bununla başarılı oldunuz mu?
RanLearns

3
Dikkat edilecek: Kişisel ikon görüntü dosya adları gerekir "icon_" ile başlar. Görüntülerin bir alfa kanalı olmalıdır. Gerekirse ImageMagick ile bir alfa kanalı ekleyebilirsiniz convert abc.png -define png:color-type=6 abc_with_alpha.png.
David Grayson

1
Aman Tanrım. bir elektron uygulaması oluşturmak ve simgelerle uğraşmak çok zor oldu. tüm blog eğitimleri güncel olmayan çevrimiçi yardımcı programlara işaret ediyor. Stackerflow'daki basit betiğiniz günümü tamamladı. teşekkür ederim!
nelsonenzo

26

Yüksek çözünürlüklü PNGgörüntüyü çok sayıda farklı düşük çözünürlüklü kopyaya dönüştürmek için her tür komut dosyasını kullanırken kullanışlı görünebilir (ve gerçekten öyle), bu tür otomatik yeniden boyutlandırmanın algılanabilir şekilde kusurlu görüntüleri oluşturacağını unutmamak gerekir. .

Çözünürlük ne kadar düşükse, simge daha bulanıktır!

Yani seviyorum imagemagick ama bu görev için doğru araç değil!

Bunun yerine, tasarımcınızdan her zaman bazı vektör formatında bir logo talep etmelisiniz, örneğin SVG. Bununla birlikte, PNGgerekli tüm çözünürlüklerde mükemmel dosyaları manuel olarak hazırlayabilir ve ardından tek bir .icnsdosya oluşturabilirsiniz; bu, ucuz bir iPhone SE'den en yeni Retina ekranına kadar her bir ekranda uygulama simgenizin güzel görünmesini sağlar. iMac. Bu PNG'leri oluşturmak için Photoshop, GIMP veya seçtiğiniz herhangi bir aracı kullanabilirsiniz.

2020 itibariyle en son Apple'ın İnsan Arayüzü Yönergelerine göre aşağıdaki PNGdosyaları hazırlamanız gerekir :

+---------------------+--------------------+--------------+
|      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 |
+---------------------+--------------------+--------------+

Tüm PNG dosyaları hazırlandıktan sonra, bunları .iconsetuzantıya sahip bir dizine yerleştirin ( Logos.iconsetörneğin) ve aşağıdakilerden aşağıdakileri yürütün Terminal:

iconutil --convert icns Logos.iconset

Bu komutu çalıştırdıktan sonra herhangi bir hata yoksa, tüm dosyalar düzgün bir şekilde işlendi ve Logos.icnsdosyayı, uygulamanız için herhangi bir modern ekrana uyacak tüm güzel net logoları içeren aynı dizinde aldınız .


16

Bir PNG dosyasını bir simge kümesi dizinine dönüştürmek için tüm işi yapan bir komut satırı düğümü modülü var:

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

9
Artık desteklenmiyor. :(
jamescampbell

13

Bu komutlar (Terminal'e girildi) eski bir icns dosyasını yeni formata dönüştürmem için çalıştı:

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

Güncelleme

-cİconutil parametre artık desteklenmemektedir. --convertBunun yerine kullanın :

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
Bunu gösterdiğin için teşekkürler, bu sayede png'leri almak için icns'den geri dönebildim! :)
Noitidart

9

Ek açıklama, .icns dosyası oluşturduğunuzda , tüm pic dosyalarını "icon_ " önekiyle yeniden adlandırmanız gerekir , aksi takdirde, iconutil hata mesajıyla başarısız olur: ".iconset: hata: ICNS oluşturulamadı." bu hiç de bilgilendirici değil.


7

@Henry ile aynıdır (yukarıdaki açıklama) ancak PNG dosya adını bağımsız değişken olarak alır ve aynı ada sahip ICNS'nin çıktısını alır.

NOT: PNG dosya adının yalnızca ayrı uzantıya, yani xpto.png'ye 1 puan olması beklenir.

Bu nedenle, aşağıdaki kodu png dosyanızın bulunduğu klasördeki "CreateICNS.src" adlı bir dosyaya kaydedin.

KOD:

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

NASIL KULLANILIR :

Sonra terminalde aynı klasöre "cd" yazın ve şunu yazın:

source CreateICNS.src {PNG filename}

burada {PNG dosyaadı}, PNG dosyanızın adıdır, yani xpto.png.

Dosyanız abc.png olarak adlandırılsaydı şunu kullanırsınız:

source CreateICNS.src abc.png

Harika! Çok basit :) belki bir .sh / script yaparsanız daha da fazla olur :) Teşekkürler!
Gutemberg Ribeiro

6

Bir svg dosyasından icn yapmak için bir bash betiği yazdım:

#!/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

Mac'te librsvg desteğiyle imagemagick'in kurulu olduğundan emin olun:

brew install imagemagick --with-librsvg

Bu senaryo bana oldukça iyi hizmet etti.


Güncelleme

Daha kapsamlı bir muamele için AppIcon.appiconset, doğru düzen ve formatla oluşturmak için bir komut satırı aracı (Swift ile yazılmış) oluşturdum :

https://github.com/kindlychung/genicon


6

@ Henry'nin komut dosyasını daha iyi görünmesi için yeniden düzenledim:

#!/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

Güncelleme

-cİconutil parametre artık desteklenmemektedir. -—convertBunun yerine kullanı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 -—convert icns $DIR
rm -frv $DIR

4
Orijinal sürüm basittir ve işlem herhangi bir kabukta manuel olarak yeniden oluşturulabilir.
Denis Barmenkov

1
İşleri manuel olarak yapmayı tercih ederseniz, bir bilgisayara ihtiyacınız yoktur.
dardo82

5

Dead simple .png 👉 .icns

  1. IconMaker.app'ı indirin - Sadece bir .applescript ısırmaz
  2. .Png dosyanızı yeni oluşturduğunuz IconMaker.app üzerine sürükleyip bırakın.

Daha fazla bilgi : http://eon.codes/blog/2016/12/06/Creating-an-app-icon/

Yüksek sierra güncellemesi iconutil artık kaynak .png boyutu konusunda daha katıdır. Bu konuyla ilgili daha fazla atlamadan sonra blog yazısında. ✌️


3

Uygulamamı doğrularken şu hatayı alıyorum:

uygulama paketi, hem 512x512 hem de 512x512 @ 2x görüntü içeren ICNS biçiminde bir simge içermez.

Terminal komutunda pek iyi değilim ve belki de yanlış bir şeyler yapıyorum. Yazdım:

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

Birincisi, Anne'nin cevabıyla ilgili bir yorumda bahsettiğim gibi, muhtemelen iconutil kullanmanıza gerek yoktur. Sadece ikon setini projenize ekleyebilmeli ve Xcode'un onu sizin için yapının bir parçası olarak dönüştürmesine izin vermelisiniz.

Her iki durumda da, bu senin sorunun olabilir:

İki PNG dosyasını bir araya getirmeye çalıştım (512x512 ve 1024x1024)… ama her zaman hata alıyorum.

1024 x 1024 punto boyutu yoktur. 1024'e 1024 piksel öğesi (Mountain Lion'dan önce 1024 nokta idi) artık 512'ye 512 nokta @ 2x için kullanılıyor.

PNG dosyanız uygun şekilde adlandırılmalıdır: icon_512x512@2x.png


3

Apple'ın eski Icon Composer 2.2 sürümü gayet iyi çalışıyor, sadece içindeki .ICNS'yi açın, 1024x1024 düğmesine basın ve görüntünüzü ekleyin.


i orijinal soru asker için konuşamam, ama bu bir çözüm tam olarak ne olduğunu ben gerekiyordu. Teşekkürler!
pestophagous

3
Apple dokümanları "Not: Icon Composer'ı kullanmayın — yüksek çözünürlüklü icns dosyaları oluşturamaz." Der. Yani @ 2x simgeleri bu şekilde yapılamaz.
Kil Köprü

Icon Composer iyi çalışıyor gibi görünüyor, Xcode için Grafik Araçları paketinin bir parçası olarak Apple geliştirici sitesinden ayrı olarak gönderilir. Ayrıca buraya bakın .
Michiel Kauw-A-Tjoe

3

@ dardo82'nin kabuk kodu iyi ve işe yaradı. İşte sh'de daha basit (tüm * nix'ler için) ve daha hızlı (gerçekten önemli olduğu gibi):

#!/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


1

Çoğunlukla Henry'nin örneğine dayanan bir işlev (burada yararlı olabilir ~/.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
}

Kullanım :

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

10 boyutları oluşturur 16x16için 512x512@2x; .pngyalnızca formattaki giriş resimlerini kabul eder .


1

Çalıştırmak iconutil -c icns Icon.iconset

Not

  • Icon.iconset bir klasördür
  • Ad küçük harfle başlar icon_
  • Icon.icnsDoğru görüntü ile gördüğünüzde , işe yaradığını bilirsiniz

görüntü açıklamasını buraya girin


Neden 3x? Apple buna ihtiyaç duymaz.
Nörotransmiter

1

2 görev vardır:
- 10 doğru icns dosyası oluşturun
- Xcode projenizi bunları doğru kullanmak için alın

Bu görevlerin her ikisinde de saatlerce süren problemlerim olduğu ve neler olup bittiğini 'görmediğimden' hoşlanmadığım için, işte temkinli olanlar için bir yol:

10 doğru icns dosyası oluşturun:
Henry'den yukarıdaki komut dosyasını kullandım: 'c' komutu dahil HighSierra ve Xcode 9.2 için hala çalışıyor.
Aldığım icns dosyası, Finder / Quicklook'ta yalnızca bir simge boyutu olarak görünüyordu ve Önizleme'de yalnızca 10 boyutun 8'ini gösteriyordu.
Bu yüzden terminali kullandım, cd ile klasörüme gittim ve icns dosyasını bir simge seti klasörüne geri döndürmek için yeni oluşturulan icns dosyasında: iconutil -c iconset (icns dosya adı) komutunu kullandım ve - lo & behold - görebildim yeni oluşturduğum 10 simge dosyam. Simge seti klasörüne Hızlı bak özelliğini kullanarak (ve kaydırıcıyla aralarında yakınlaştırma yapabilmek için tam ekran modunu kullanarak), tüm boyutların gerçekten çok iyi göründüğünü kontrol edebilirim.

Bir kenara: PSE ile yeniden boyutlandırma girişimlerimden daha iyi görünüyorlardı, büyük olasılıkla PSE'deki tüm yeniden boyutlandırma seçenekleriyle oynamak için zaman ayırmadım. PSE kullanıyorsanız, png dosyalarınızın renk profili olmadan kaydedildiğinden emin olun. Ayrıca, cehaletimi itiraf edersek, benim için 256x256 @ 2 dosyası, 512x512 dosyasıyla aynıdır - her ikisi de 72 dpi. Yukarıdaki 144 dpi yorumları takip etmeye çalışmak benim için işe yaramadı.

Xcode projenizi doğru şekilde kullanmak için alın:
İlk olarak, Xcode içindeki tüm sonuçsuz girişimlerimi sildim ve git deposuna temiz bir sürüm verdim (akıllıca olan şey, ilk önce temiz bir sürümü işlemek olurdu - simgeyi çılgınca başlatmadan önce) ek odyssee).
Ayrıca info.plist dosyasında 'simge dosyası' girişine bağlı işaretçi olmadığından ve Genel proje ayarlarımda Uygulama Simgeleri için AppIcon'u seçtiğimden emin oldum. Daha sonra simge seti klasöründen her bir png resim dosyasını ilgili AppIcon Spaceholder'a kopyaladım (seçenek basılıyken sürükleyip bırakın). Böylece yine neler olduğunu görebildim. Xcode bunu icns dosyalarına dönüştürdü veya belki - bir icns klasöründen türetilen simge seti klasörüm olarak - dosya formatları kabul edildi.
Ardından bir assets.asset kataloğu ekledim ve varlıklar kataloğuna OS için yeni bir 'AppIcons ve Launch Images' AppIcon Klasörü ekledim.

Ardından arşivleyin ve doğrulayın; yükleme veya doğrulama sırasında herhangi bir hata olmayacaktır.


Biçimlendirme! Cevabınız iyi olabilir, ancak okunamaz. Paragrafları ve satır başlarını kullanın.
Nic3500

0

Buna ihtiyacım vardı ama CMake için. Ayrıca bir SVG verme seçeneğini de istedim.

İşin özü: https://gist.github.com/Qix-/f4090181e55ea365633da8c3d0ab5249

Ve CMake kodu:

# 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

Merhaba, ihtiyaçlarım için tek başına sürükle ve bırak simgelerinde veya bir klasörde arama yapmak için simgelerde çalışan bir damlacık yaptım (Tüm simgelerin Ciltlerindeki aramalar çok zaman alabileceğinden klasörlerle sınırlı kaldım). Böylece sürükle ve bırak işleminde, bir simge içerebilecek her şeyi, klasörleri veya uygulamaları bırakabilirsiniz. Oluşturulan ikon seti orijinal ikonun adını taşır, bir "/ aaaicones" dizinine ve ikon yoluna yerleştirilir. "/ Aaaicones klasöründeki örnek xcode.app gönderirseniz" /aaaicones/Applications/xcode.app/access.iconset "ve /aaaicones/Applications/xcode.app/access.icns (yeniden oluşturulan simge) bulacaksınız simgelerin tam yolunun izlendiği bir metin dosyası ve karşılık gelen simge kümesi örneğinin yolu "/Applications/xcode.app/Contents/Applications/Instruments.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.