删除图像中的 Alpha 通道

Posted

技术标签:

【中文标题】删除图像中的 Alpha 通道【英文标题】:Remove alpha channel in an image 【发布时间】:2014-11-28 02:04:37 【问题描述】:

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

【问题讨论】:

在图像编辑器中打开 PNG 并在禁用 alpha 通道的情况下重新保存? 【参考方案1】:

不推荐导出为 JPG,然后返回 PNG 的公认答案。

这是流程中的一个额外步骤(2 个导出) JPG 有损,所以会丢失一些图片数据

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

使用预览应用(Mac):

    打开图片 Command-Shift-S 复制(创建副本) Command-S 保存 取消选中“Alpha”复选框 从文件名中删除“副本”(包括空格) 这将覆盖您的原件,如果您想保留原件,只需在名称中留下“副本”即可 保存 点击“替换”以确认您要覆盖原来的 仅在覆盖原始文件时才需要

【讨论】:

^ 这是一个更好的答案,恕我直言。 JPG 不支持 alpha 通道,这将允许您使用 LOSSLESS 格式并处理 alpha 通道(而不是避免它)。 我不明白为什么 iTunes Store 团队在手表应用程序图标中显示此错误(Alpha 通道),而在以前的版本中他们认为它们是正确的。失去的时间!谢谢苹果公司! 非常感谢无损解决方案! 对于 macOS High Sierra,即使未选中该复选框,预览似乎也始终使用 alpha 通道保存 PNG。如果我打开保存的文件,信息框总是显示“Has Alpha: 1”。 sips 工具还告诉我hasAlpha: yes。另外,iTunes Store 抱怨不需要的 Alpha 通道(“操作失败 – App Store 图标......不能透明,也不能包含 Alpha 通道”)。 正如@Psychomentally 提到的,ImageMagick 终于为我工作了:convert in.png -alpha off out.png。回覆。预览:在导出对话框中打开/关闭“alpha”会改变预测的文件大小,但保存总是会写入带有 alpha 信息(和相应大小)的文件。【参考方案2】:

如果您需要从带有图标的目录中删除所有 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

【讨论】:

这给出了 8 位输出图像而不是 24 位 如果你把-alpha remove -alpha off $i;改成-alpha remove -alpha off png24:$i;,它会输出一个24位的png 你的建议破坏了 Xcode,现在我无法运行我的命令行脚本来构建我的所有目标,因为这个安装覆盖了。 imagemagik 安装花了很长时间,并安装了很多我现在必须删除的东西。你能展示一些我可以用来删除我刚刚安装的所有东西的命令行吗?【参考方案3】:

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

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

【讨论】:

这将导致少量的质量损失,并且还会导致更大的 PNG 文件,因为 PNG 格式不适合压缩您在生成 JPG 文件时获得的那种工件。此外,即使没有实际透明度,Apple 也会拒绝具有 alpha 通道的 PNG 图像。 我在旧版本的 macOS Sierra 上试用过,效果很好。 您实际上可以在导出为 PNG 时取消选中“Alpha”复选框。无需先导出为 JPG。 如何对图像数据进行操作,将图像通道从4个减少到3个? 任何带有透明通道的PNG都不会被接受,无论图像中是否显示透明。【参考方案4】:

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

【讨论】:

我曾经使用这种方法,但在 MacOS High Sierra 上,取消选中预览中的 Alpha 不会做任何事情,除非您选择 JPG 作为输出。如果我尝试打开一个 PNG,导出 PNG w/o Alpha,然后打开新的 PNG,它有一个 Alpha 通道。 在 High Sierra (10.13.4) 为我工作【参考方案5】:

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

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

【讨论】:

如何在 cmd bash 上选择 png 文件 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: command not found【参考方案6】:

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

【讨论】:

【参考方案7】:

尝试将我的应用上传到 iTunes 应用商店时出现以下错误:

iTunes Store 操作失败

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

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

Alpha 通道:是

找到了上面的解决方案,通过在未选中 Alpha 复选框的情况下导出它来使用预览来删除 alpha 通道,但我想出了一种批量导出它们的方法,因为我需要从 18 个资产中去除 alpha 通道。

我让批量导出工作的方式是在查找器中选择我的所有应用程序图标资产 > 右键单击​​ > 打开(或打开预览)

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

完成!现在,您的所有图像都已导出,且 Alpha 通道已被剥离。

【讨论】:

我尝试了同样的方法,但它不再适用于 High Sierra。 Alpha 通道不会在预览中移除。 这对我在 macOS Catalina 上的 Preview 11.0 非常有用。 MacOS Big Sur 上没有 alpha 复选框:(【参考方案8】:

从 png 中移除 alpha 通道:

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

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

【讨论】:

这突出了 Apple 最近的两个 facepalm 问题.... 【参考方案9】:

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

【讨论】:

【参考方案10】:

我将 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://***.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

【讨论】:

以上是关于删除图像中的 Alpha 通道的主要内容,如果未能解决你的问题,请参考以下文章

ALPHA通道如何给图像添加阴影效果??

第八章 认识Alpha通道(1)

图像格式中的Alpha通道是指啥?

去除图像中的alpha通道或透明度

Python PIL 完全删除每个 alpha 通道

如何在 ios 中使用 vImage 旋转和粘贴带有 alpha 通道的图像?