如何使用iconutil手动创建icns文件?

Blu*_*lue 97 macos xcode cocoa icons iconutil

当我验证我的应用程序时,我收到此错误:

应用程序包不包含ICNS格式的图标,包含a 512x512512x512@2x图像.

我用Img2icns应用程序制作icns图标,直到今天它始终正常工作.但现在我收到了这个错误,没有办法让它发挥作用.我试图将两个PNG文件放在一起(512x5121024x1024)在Img2icns中,但我总是得到那个错误.我也尝试按照Apple的OS X人机界面指南中的说明进行操作,但是当我尝试制作图标集时,我收到此终端错误:

-bash:意外标记'newline'附近的语法错误

我对终端命令不是很好,所以也许我做错了.我写:

iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>
Run Code Online (Sandbox Code Playgroud)

如果有人能提供帮助,我将非常感激.谢谢,马西.

Aid*_*dan 255

这是一个脚本,用于将1024x1024 png(名为"Icon1024.png")转换为所需的icns文件.将它保存到png文件所在文件夹中名为"CreateICNS.src"的文件夹中,然后在"cd"终端中找到相同的文件夹并输入"source CreateICNS.src"来调用它:

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
Run Code Online (Sandbox Code Playgroud)

  • 我的天啊。构建一个电子应用程序并处理图标是一件非常痛苦的事情。所有博客教程都指向过时的在线实用程序。stackerflow 上你的简单脚本让我很高兴。谢谢你! (5认同)
  • 高超。我把 Icon1024.png 放在桌面上,然后运行你的代码就完成了 (4认同)
  • **需要注意的重要事项:**您的图标图像文件名*必须*以"icon_"开头.图像必须具有Alpha通道.如果需要,可以使用ImageMagick添加alpha通道`convert abc.png -define png:color-type = 6 abc_with_alpha.png`. (3认同)
  • 如果有人想知道,这些尺寸仍然是最新的:https://developer.apple.com/design/ human-interface-guidelines/macos/icons-and-images/app-icon/#app-icon -尺寸 (3认同)
  • 这个完美的小剧本是否有可能在El Capitan被打破?将我的Mac升级到10.11.3,此脚本现在返回"错误:Unsuported图像格式",然后是"/Users/IconScript/MyIcon-osx.iconset:error:名为'icon'的变体不包含图像资源." 然后"MyIcon-osx.iconset:错误:无法生成ICNS." 在没有更新到El Capitan的Mac上尝试了相同的脚本和.png文件,并且它一如既往地工作... =( (2认同)

Ann*_*nne 58

查看以下说明(链接):

使用iconutil手动创建icns文件

iconutil命令行工具转换iconset文件夹部署就绪,高分辨率的ICNS文件.(您可以通过输入man iconutil终端找到此工具的完整文档.)使用此工具还会压缩生成的icns文件,因此您无需执行其他压缩.

将一组图标转换为icns文件

在终端窗口中输入此命令:

iconutil -c icns <iconset filename>

<iconset filename>包含要转换为的图标集的文件夹的路径在哪里icns.iconset file除非您指定输出文件,否则输出将写入与其相同的位置:

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

换句话说,您需要替换<iconset filename>路径:

/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset
Run Code Online (Sandbox Code Playgroud)

由于路径包含空格,因此您需要使用双引号,例如:

iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset"
Run Code Online (Sandbox Code Playgroud)

此命令应该正常工作.

  • 应存在以下文件: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文件应以每英寸144像素存储,而其他文件应以每英寸72像素存储. (9认同)
  • 但是,您可能不需要使用`iconutil`.您只需将iconset添加到项目中,然后让Xcode将其作为构建的一部分进行转换.这在前一个(非常简短的)部分中有所介绍:http://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40012302- CH7-SW8 (2认同)

Zek*_*eke 18

有一个命令行节点模块,它完成将PNG文件转换为iconset目录的所有工作:

npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns
Run Code Online (Sandbox Code Playgroud)

  • 不再支持.:( (9认同)

Tra*_*oud 16

虽然使用各种脚本将高分辨率PNG图像转换为不同的低分辨率副本可能看起来很方便(而且确实如此),但是不应该忘记这种自动调整大小会渲染出明显不完美的图像.

分辨率越低,图标就越模糊!

相反,您应该始终以某种矢量格式请求徽标,例如在SVG设计师中.有了这个,您可以手动准备所有所需分辨率的完美PNG文件,然后制作一个.icns文件,这将使您的应用程序图标在每个屏幕上看起来都很漂亮,从手机到一些高端Retina显示屏的最新iMac电脑.

根据截至2016 年的最新Apple指南,您应准备以下PNG文件:

+---------------------+--------------------+--------------+
|      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 |
+---------------------+--------------------+--------------+
Run Code Online (Sandbox Code Playgroud)

准备完所有PNG文件后,将它们放入某个带.iconset扩展名的目录(Logos.iconset例如)并从终端执行:

iconutil --convert icns Logos.iconset
Run Code Online (Sandbox Code Playgroud)

如果在执行此命令后没有错误,那么所有文件都已正确准备,并且您将Logos.icns文件放在同一目录中,其中包含适用于您的应用程序的所有美丽清晰徽标,适用于2017年的任何现代屏幕.


Aid*_*dan 12

这些命令(在终端中输入)对我有用,可以将旧的icns文件转换为新格式:

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
Run Code Online (Sandbox Code Playgroud)

更新

-c不再支持iconutil 的参数.--convert改为使用:

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
Run Code Online (Sandbox Code Playgroud)


小智 9

附加注释,当您创建.icns文件时,您需要使用前缀"icon_ " 重命名所有pic文件,否则,iconutil将失败并显示错误消息:".msset:error:无法生成ICNS." 这根本没有提供信息.


eon*_*ist 6

死简单.png .icns

  1. 下载IconMaker.app - 这只是一个不会咬人的 .applescript
  2. 将您的 .png 拖放到您刚刚创建的 IconMaker.app 上。

更多信息http : //eon.codes/blog/2016/12/06/Creating-an-app-icon/

高山脉更新 iconutil现在对源 .png 大小更加严格。在跳转后的博客文章中详细介绍了这一点。??


qed*_*qed 6

我编写了一个bash脚本,用于从svg文件制作icns:

#!/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
Run Code Online (Sandbox Code Playgroud)

确保在mac上安装了librsvg支持的imagemagick:

brew install imagemagick --with-librsvg
Run Code Online (Sandbox Code Playgroud)

这个脚本对我很有帮助.


更新

为了更彻底的处理,我创建了一个命令行工具(用Swift编写),用于生成AppIcon.appiconset正确的布局和格式:

https://github.com/kindlychung/genicon


Tel*_*ias 6

与@Henry相同(上面的注释),但将PNG文件名作为参数并输出具有相同名称的ICNS。

注意: PNG文件名仅应具有1个指向单独扩展名的点,即xpto.png。

因此,将以下代码保存到png文件所在的文件夹中的“ CreateICNS.src”文件中。

代码:

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
Run Code Online (Sandbox Code Playgroud)

如何使用 :

然后在终端中,“ cd”到相同的文件夹并键入:

source CreateICNS.src {PNG filename}
Run Code Online (Sandbox Code Playgroud)

其中{PNG filename}是您的PNG文件的名称,即xpto.png。

如果您的文件名为abc.png,则可以使用:

source CreateICNS.src abc.png
Run Code Online (Sandbox Code Playgroud)


dar*_*o82 5

我重构了@ Henry的剧本以使其看起来更好:

#!/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
Run Code Online (Sandbox Code Playgroud)

更新

-c不再支持iconutil 的参数.-—convert改为使用:

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 原始版本很简单,可以在任何shell中手动重现该过程. (3认同)