删除图像中的Alpha通道


103

我有一个适用于iOS的应用程序图标,但Apple不允许Alpha出现在图像中。如何删除此Alpha通道?我只有PNG图片,没有源文件,因为我的朋友为我制作了图片。


5
在图像编辑器中打开PNG,然后在禁用Alpha通道的情况下重新保存?
亚历山大·奥玛拉

1
接受的答案会丢失图像数据,并且具有多余的步骤。请参阅下面的解决方案:stackoverflow.com/a/38256612/5764320
Mycah

我也做了一个小工具,在这里,你可以简单地拖放图像和删除Alpha通道,而不会丢失图像数据:removealphachannel.com
阿里Nasserzadeh

Answers:


48

假设您没有其他图像编辑器,则可以在Mac上的“预览”中将其打开,并使用“导出”选项以其他格式重新保存它-为确保摆脱alpha通道,最好导出转换为JPG(最佳质量),然后将其打开并再次将其导出为PNG。

话虽如此,我怀疑只要没有实际的透明度,就可以通过透明通道提交图标。


9
这将导致少量的质量损失,也将导致较大的PNG文件,因为PNG格式不适合压缩生成JPG文件时得到的伪像。此外,即使没有透明性,Apple也会拒绝使用Alpha通道的PNG图像。
philwilks '16

我尝试了较旧版本的macOS Sierra,并且可以正常工作。
Bhaumik Desai

10
实际上,您可以在导出为PNG时取消选中“ Alpha”复选框。无需先导出为JPG。
Petr Peller

如何对图像数据进行操作以将图像通道从4减少到3?
voldikss

5
无论透明度是否显示在图像中,任何带有透明度通道的PNG都将不被接受。
gbarnett

240

不建议接受将答案导出为JPG,然后再导出为PNG的答案。

  • 这是该过程的额外步骤(2个出口)
  • JPG是有损的,因此您将丢失一些图像数据

这是一种超快速简便的方法,无需额外导出或保存为(有损)JPG:

使用预览应用程序(Mac):

  1. 打开图片
  2. Command-Shift-S复制(创建副本)
  3. Command-S保存
  4. 取消选择“ Alpha”复选框
  5. 从文件名(包括空格)中 删除“副本”
    • 这样会覆盖您的原件,如果您要保留原件,只需在名称中保留“ copy”即可
  6. 保存
  7. 点击“替换”以确认您要覆盖原始文件
    • 仅在覆盖原始文件时才需要 删除Alpha通道

2
^恕我直言,这是一个更好的答案。JPG不支持Alpha通道,这将允许您使用LOSSLESS格式并处理Alpha通道(而不是避免使用它)。
Cody-PHP-jQuery

4
我不明白为什么iTunes Store Team在手表应用程序图标中显示此错误(Alpha通道)时,在以前的版本中他们认为它们正确。失去的时间!谢谢苹果公司!
Markus

非常感谢您的无损解决方案!
Shchvova '16

10
使用macOS High Sierra,即使未选中该复选框,预览似乎也总是使用Alpha通道保存PNG。如果我打开保存的文件,则信息框中始终显示“ Has Alpha:1”。sips工具也告诉我hasAlpha: yes。另外,iTunes Store抱怨不需要的Alpha通道(“操作失败– App Store图标…不能透明也不能包含Alpha通道”)。
Stefan

2
如@Psychomentally所述,ImageMagick终于为我工作:convert in.png -alpha off out.png。回覆。预览:在导出对话框中打开/关闭“ alpha”会更改预测的文件大小,但是保存时始终会使用alpha信息(和相应的大小)写入文件。
Stefan

55

如果您需要使用图标从目录中删除所有Alpha通道,请使用以下命令:

for i in `ls *.png`; do convert $i -background black -alpha remove -alpha off $i; done

如果您使用的是Mac OS Mojave,并且“未找到转换命令”

brew install imagemagick

安装Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

1
这给出了8位而不是24位的输出图像
Stepan Yakovenko,

如果更改-alpha remove -alpha off $i;-alpha remove -alpha off png24:$i; ,则将输出24bit png
Lawrence Ryerson Davis IV

37

如果您使用的是“预览”应用,则无需导出,然后在jpg和png之间重新导出,只需选择“导出”,然后在文件类型(PNG)下,您会看到一个alpha复选框,将其取消设置并保存。


4
我曾经使用这种方法,但是在MacOS High Sierra上,除非您选择JPG作为输出,否则在Preview中取消选中Alpha不会执行任何操作。如果我尝试打开PNG,不带Alpha导出PNG并打开新的PNG,则它具有Alpha通道。
Dan Loughney

在High Sierra(10.13.4)为我工作
fl034 '18

14

无需先将图像导出为jpg。您可以取消选中Alpha通道的复选框,并在预览应用程序中直接从png导出到没有alpha通道的png。

在此处输入图片说明


13

您可以尝试imagemagick(也可以轻松调整大小以适应不同的大小):

convert in.png -background black -alpha remove -alpha off -resize 1024x1024 out.png

我如何选择cmd bash上的png文件
Marlhex

Marlhexs-MacBook-Pro:Edgar marlhex $ ls LUNCH SCREEN.jpg nuevo icon-5.png LUNCH SCREEN.png nuevo icon-51024 copy.jpg nuevo icon-5.jpg nuevo icon-51024.png Marlhexs-MacBook-Pro:Edgar marlhex $ nuevo icon-51024.png -bash:nuevo:找不到命令
Marlhex

9

尝试将我的应用程序上载到iTunes App Store时遇到以下错误:

iTunes Store操作失败

错误ITMS-90717:“无效的App Store图标。“ MyApp.app”中资产目录中的App Store图标不能透明,也不能包含Alpha通道。”

我通过在Finder中找到资产并查找其信息(⌘+ i),确认我的应用商店图标确实包含Alpha通道。在更多信息下面,它显示:

Alpha频道:是

找到了上面的解决方案,以使用Preview通过取消选中Alpha复选框将其导出来删除Alpha通道的方法,但是由于我有18个资产需要从中剥离Alpha通道,因此找到了一种批量导出它们的方法。

我可以批量导出的方式是在finder中选择我所有的应用程序图标资产>右键单击>打开(或使用预览打开)

现在,所有资产将显示在同一窗口中。全选(⌘+ a),然后选择“文件”>“导出选定的图像...”>“展开选项”>取消选中“ Alpha”复选框>选择(您的目标文件夹)

做完了!现在,您所有的图像都将被删除,而Alpha通道被去除。


1
我尝试了相同的方法,但在High Sierra上不再起作用。Alpha通道不会在“预览”中删除。
Satheeshwaran

6

要从png中删除Alpha通道:

在Mac上:如果导出或保存图像,则预览版本9.0(macOS Sierra)可以删除Alpha通道。

预览版本10.0(944.2)(macOS High Sierra)不会删除Alpha通道。导出和/或保存都不会从图像中删除Alpha通道。


2
这突显了苹果公司最近出现的2个facepalm问题。...High Sierra忽略了保存选项以及许多人在这里的原因,Xcode突然由于图标透明性而无法上传应用程序
MobileVet

4

在Flutter应用程序的上下文中遇到了同样的问题,我专门为此任务专门设计了一个简单的网站,您可以在其中删除图像的Alpha通道:

删除Alpha通道

基本上,我直接在浏览器中使用Web Assembly运行ImageMagick,因此不会上传任何图像,并且不需要任何其他工具(例如Gimp)。



2

好吧,由于您使用的是Mac,下次您可能只想使用Automator。将图像转换为BMP(无损),然后再转换回PNG。让它保存并瞧瞧...


0

我将Nikita Pushkar的非常好的解决方案放入了一个shell脚本中,该脚本可转换在res/icon/ios以下位置找到的所有iOS图标:

如果不可用,它将使用brew安装imagemagick,因此我猜它只能在Mac上运行。

#! /usr/bin/env bash
#
# remove alpha channel from PNG images when App Store upload fails
#
# taken from https://stackoverflow.com/a/52962485 - @Nikita Pushkar
#
# make sure to have brew installed, see https://brew.sh:
#   /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
#
# make sure to have imagemagick installed, see https://imagemagick.org:
#   brew install imagemagick
#

if command -v convert; then
    echo "imagemagick seems to be installed"
else
    echo "imagemagick not installed, trying to install ..."
    if command -v brew; then
        echo "brew is installed, using it"
    else
        echo "brew not installed, trying to install ..."
        /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    fi

    brew install imagemagick
fi

for i in `ls res/icon/ios/*.png`;
do
    echo "convert $i"
    convert $i -background white -alpha remove -alpha off $i;
done

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.