有没有办法从大型图像创建 xxhdpi、xhdpi、hdpi、mdpi 和 ldpi 可绘制对象?

Posted

技术标签:

【中文标题】有没有办法从大型图像创建 xxhdpi、xhdpi、hdpi、mdpi 和 ldpi 可绘制对象?【英文标题】:Is there a way to create xxhdpi, xhdpi, hdpi, mdpi and ldpi drawables from a large scale image? 【发布时间】:2013-10-12 08:39:09 【问题描述】:

有没有办法从大尺寸图像自动创建 xxhdpi、xhdpi、hdpi、mdpi 和 ldpi 可绘制对象?例如,假设我有一个 512x512 的图像,并且我希望在适当的文件夹中为 android 支持的不同屏幕分辨率提供此图像的不同版本。

【问题讨论】:

如果您使用的是 Windows:github.com/delight-im/AndroidDrawableResizer 我在安卓上做了这个工具,你把你的图片放在手机的下载文件夹里,然后选择一个参考尺寸和dpi,它就会转换成所有的密度并创建相应的文件夹:play.google.com/store/apps/details?id=fr.arnaudguyon.dpiresizer 检查这个答案以获得快速简便的方法 - ***.com/a/40830399/4015856 在Android Studio中,右键res -> New -> Image Asset,选择Launcher Icons (legacy) 【参考方案1】:

选项 #1:只需发布 -xxhdpi 可绘制对象并让 Android 在运行时为您对它们进行下采样(缺点:仅适用于已知 -xxhdpi 的较新设备)。

选项 #2:使用 Android Asset Studio 为您下采样。

选项 #3:根据ssantos' answer 在图形编辑器中自动执行该过程。

选项 #4:为自己编写一个解决方案,使用 ImageMagick 之类的东西。

选项#5:使用image baker

【讨论】:

仅运送 xxhdpi 和 xhdpi 是一种替代方案吗?我假设不理解 xxhdpi 的设备将从 xhdpi 降级 @Juan:“仅运送 xxhdpi 和 xhdpi 是一种替代方案吗?” -- 仅当您的 minSdkVersion 为 8 或更高时。如果您尝试支持比这更旧的设备,您还需要一个hdpi,因为 API 级别 7 及以下级别既不存在 xhdpi 也不存在 xxhdpi。现在,你是否喜欢你的下采样drawables的外观完全是另一回事...... 关于选项 #1 和您关于 xxhdpi 的 cmets 不存在,我认为这是不正确的。在内部,Android 使用 DPI 数字(160、320、480 等)而不是字符串作为资源限定符。如果系统 DPI 为 160 并且它找到了 640 的图像,它会将其下采样 4,而无需“了解”其文本限定符。我们已将仅存在于 xxxhdpi (Android 4.3) 文件夹中的资源发送到 Android 2.3 设备。 选项 2 不支持 xxxhdpi 选项 #4:使用 ImageMagick 的脚本解决方案here【参考方案2】:

更新

前面提到的插件已经被废弃了,但它显然有一个最新的 fork here。

旧答案

我使用名为Android Drawable Importer的Android Studio插件:

要在安装后使用它,请右键单击您的 res/drawable 文件夹并选择New > Batch Drawable Import

然后通过+ 按钮选择您的图像并将分辨率设置为 xxhdpi(或任何源图像的分辨率)。

【讨论】:

谢谢,但我使用的是“Batch Drawable Import”而不是“Scaled Drawable”。 正如@user123456 所说,我必须使用 Batch Drawable,因为 Scaled Drawable 没有出现 这个插件似乎不再维护 - 最后一次提交是在 2016 年(github.com/winterDroid/…),崩溃报告没有任何响应...... 我设法在 AS 3.6 下resurrect 这个可爱的插件,并且可能,虽然未经测试,在 AS 3.5 下也是如此。 @PrajwalW,更新了提到最新分叉的答案。【参考方案3】:

更新:

安装插件的旧方法不再起作用,但原始插件的一个分支仍然有效here。手动安装插件后,您仍然可以遵循此答案。

如果您想要快速简便的方法,请访问 https://www.img-bak.in/ 或 https://appicon.co/,它们也适用于 ios

我将尝试逐步解释该过程,以便任何人都易于理解。

1。按照自述文件中的说明手动安装插件

2。重启安卓工作室

3。正如您在下面的屏幕截图中看到的那样,这里只有一个可绘制对象

4。现在右键单击drawable文件夹并导航到New>Batch Drawable Import

5。现在选择"the Single"你想要不同的drawable变体的图像。

6。现在选择原始图像的尺寸。如果原始图像是 xxhdpi,就像我的情况一样,请选择“xxhdpi”作为“Source Resoultion”。

7。现在按确定然后再确定..然后它需要几秒钟然后你会神奇地得到所有可绘制的变量。

【讨论】:

这个插件不错,但原始大小必须有足够的分辨率才能保持资产的良好质量。我想最好先向设计师询问 xxxhdpi 资产,然后按比例缩小它们。 @LaxmanBhattarai,我想只在平板电脑中支持我的应用程序。因此,根据您的回答,我应该为图像使用哪个可绘制文件夹以支持所有平板电脑设备?可以告诉我吗? developer.android.com/training/basics/supporting-devices/… 请参考此文档,我认为在任何文件夹末尾附加 -land 都可能导致横向布局 “Icon Pack Drawable Importer”选项使用 Material/Android 图标并解决了我的问题。感谢提示@LaxmanBhattarai 这个插件似乎不再维护 - 最后一次提交是在 2016 年(github.com/winterDroid/…),崩溃报告没有任何响应......【参考方案4】:

使用Image Baker等在线服务。

这很简单。上传图片并下载适用于 Android 和 iOS 的已处理资产。

注意:Image Baker 是我和我的朋友创建的免费服务。

【讨论】:

这帮助我获得了所有可绘制的尺寸。谢谢!【参考方案5】:

根据 CommonsWare 的回答,使用 ImageMagick(转换)的 bash 脚本:

感谢Kishan Vaghela,添加了文件夹创建和参数检查

#!/bin/sh
#---------------------------------------------------------------
# Given an xxhdpi image or an App Icon (launcher), this script
# creates different dpis resources and the necessary folders
# if they don't exist
#
# Place this script, as well as the source image, inside res
# folder and execute it passing the image filename as argument
#
# Example:
# ./drawables_dpis_creation.sh ic_launcher.png
# OR
# ./drawables_dpis_creation.sh my_cool_xxhdpi_image.png
#
# Copyright (c) 2016 Ricardo Romao.
# This free software comes with ABSOLUTELY NO WARRANTY and
# is distributed under GNU GPL v3 license. 
#---------------------------------------------------------------

if [ $# -eq 0 ]; then
    echo "No arguments supplied"
else if [ -f "$1" ]; then
    echo " Creating different dimensions (dips) of "$1" ..."
    mkdir -p drawable-xxxhdpi
    mkdir -p drawable-xxhdpi
    mkdir -p drawable-xhdpi
    mkdir -p drawable-hdpi
    mkdir -p drawable-mdpi

    if [ $1 = "ic_launcher.png" ]; then
        echo "  App icon detected"
        convert ic_launcher.png -resize 144x144 drawable-xxhdpi/ic_launcher.png
        convert ic_launcher.png -resize 96x96 drawable-xhdpi/ic_launcher.png
        convert ic_launcher.png -resize 72x72 drawable-hdpi/ic_launcher.png
        convert ic_launcher.png -resize 48x48 drawable-mdpi/ic_launcher.png
        rm -i ic_launcher.png
    else
        convert $1 -resize 75% drawable-xxhdpi/$1
        convert $1 -resize 50% drawable-xhdpi/$1
        convert $1 -resize 38% drawable-hdpi/$1
        convert $1 -resize 25% drawable-mdpi/$1
        mv $1 drawable-xxxhdpi/$1
    fi
echo " Done"
else
    echo "$1 not found."
fi
fi

【讨论】:

非常有用的脚本!无论如何,我会为 xhdpi 使用 67%(而不是 66%)。这是因为 xhdpi 和 xxhdpi 之间的比率是 2/3,当以百分比和四舍五入的方式查看时,得到 67。否则,如果使用 66 并说输入的分辨率为 xxhdpi=96*96,则会得到 xhdpi=63*63而不是 64*64。 如果没有找到我们应该创建目录 请检查更新的脚本gist.github.com/Kishanjvaghela/8ec54f66c322d8d6940b4c0d1a58098d 非常有用,而且效果很好。我猜你最后错过了一个fi。在 bash 4.3.11 上给出错误 你说得对@Mijo,Kishan 实际上在他的要点中有最后一个 fi,我把它删除了,我很傻【参考方案6】:

编辑:

该网站现在称为appicon.co


我通常使用assets.codly.io 它在您的浏览器中本地生成资产,无需上传,无需下载。

【讨论】:

它只接受“应用程序图标图像(1024x1024”作为输入。 @MateuszKonieczny 网站已更新,其余图像的图像有另一个选项卡,称为图像集。 对于 android 它只生成应用程序图标,即 manip 它还生成可绘制图标 在该网站中选择您的设计基本尺寸是多少?我们应该选择 3x 还是 4x ??【参考方案7】:

刚刚在新的 Android Studio 中找到了一种简单的方法:

【讨论】:

KinhKohn,还有什么?我们可以选择其他资源吗? 如果你想上传任何你想要的图片,只需使用浏览选项。如果这就是你的意思。 是的,它有效。但它似乎只在资产类型“启动器图标”中制作所需的颜色图标。因此,它还替换了启动器图标。并将图像放入 mipmap 文件夹。 注意,只有想加图标的时候才合适。【参考方案8】:

我在 Eclipse 中使用了一个名为 Android Icon Set 的工具来处理标准图标,例如 Launcher、ActionBar、Tab 图标和通知图标。您可以从 File --> New --> Other.. --> Android --> Android Icon Set 启动它。最好的部分是您可以从计算机中选择任何文件,它会自动将所有标准尺寸的图像放入您的项目目录中。

【讨论】:

...您也可以使用与此工具等效的网站:android-ui-utils.googlecode.com/hg/asset-studio/dist/…(此答案中描述的工具更好,因为它直接集成到 Eclipse 中,并且会自动将图标放置在正确的文件夹)。 是否支持“通用图标”? 网络工具似乎支持它。虽然我也没有使用过网络。您可以查看此链接:android-ui-utils.googlecode.com/hg/asset-studio/dist/…【参考方案9】:
    只需使用https://romannurik.github.io/AndroidAssetStudio/index.html。它可以从图像中制作一组图标,然后您可以下载一个 zip 文件。 或在https://github.com/redwarp/9-Patch-Resizer/releases 下载Windows 应用程序(无需安装)并打开一个图标。 您也可以使用插件Android Drawable Importer,请参阅上面的答案。因为它被废弃了,安装forks。请参阅Why does Android Drawable Importer ignore selection in AS 3.5 onwards 或https://github.com/Vincent-Loi/android-drawable-importer-intellij-plugin。 https://appicon.co/#image-sets。

【讨论】:

Android Drawable Importer 的作者不再是 AWOL 之前,我已经为以后的 Android Studio 版本敲定了一个临时 installation zip。 @BadLoser,我看到了你的话题,谢谢!我很少使用这个插件,它包含一些错误,所以如果它们再次发生,会尝试你的解决方案。 是的 - 这个老东西肯定写在墙上 - 但直到 AS 资源管理器完全清理它的行为!【参考方案10】:

使用 Android Studio 图像资源

转到:

 Project>res --> right click

 new> image asset

然后设置:

-Icon type: Launcher Icons
-Asset type: Image
-Path: the/path/to/your/image
-Trim: No
-Padding: 0%
-Shape: None
-Effect: None

选择:下一步>完成。

Now you will have your icon in the correct resolutions.

编辑:我建议使用 SVG 图像来创建 Vector Drawable,然后在画布中使用它们将它们调整为正确的大小或简单地更改 DP。

您可以从 Google 获取默认图标,也可以创建自己的图标

 Project>res --> right click
 new> vector asset

然后设置:

-Asset type: Local file (SVG, PSD)
-Path: the/path/to/your/image
-Size: check Override to keep your aspect ratio.
-Chek enable auto mirroring for RTL Layout.

选择:下一步>完成。

现在您将拥有您的图标,您将能够更改大小、颜色等...

【讨论】:

【参考方案11】:

不是 100% 自动的,但我使用 Photoshop Actions 节省了很多时间。

例如,给定 xhdpi 资产,然后我为 hdpimdpi 创建一个任务,分别缩放到 66.66% 和 44.44%。然后我对文件夹 xhdpi 上的所有图像运行操作。

对于 512x512 图像,您所要做的就是计算应缩放图像以达到 xxhpi、xhdpi、hdpi 和 mdpi 的百分比。

【讨论】:

【参考方案12】:

还可以将 Vector Asset Studio 与 Scalable Vector Graphics (SVG) 结合使用。 Android Studio 将为您处理剩下的事情。正如official documentation 所说:

Vector Asset Studio 帮助您添加材质图标并导入 Scalable 将矢量图形 (SVG) 文件作为可绘制对象添加到您的应用项目中 资源。与光栅图像相比,矢量绘图可以减少 您的应用程序的大小,并在不损失图像质量的情况下调整大小。他们 帮助您更轻松地支持不同的 Android 设备 屏幕尺寸和分辨率,因为您可以显示一个矢量 都可以绘制。

我认为这是未来的方法。

【讨论】:

【参考方案13】:

我编写了一个 Photoshop 脚本来从 PSD 文件创建 ic_launcher png 文件。只需检查ic_launcher_exporter。

要使用它,只需下载它并使用 photoshop 中的脚本。

并配置要生成输出文件的位置。

【讨论】:

【参考方案14】:

最简单的方法是使用Resource Manager

然后你可以选择每个密度

导入后可以看到这张图片的6个不同版本

【讨论】:

我只能看到一个版本的图像,我可以用分辨率“标记”。您无法从一张现有的高分辨率图像缩小并生成所有屏幕密度的图像。 当你为图像选择不同的密度时,缩小是自己完成的,资源管理器会为你创建所有不同的密度版本 我真的很想这么做,并且尝试了所有方法,但是没有办法,或者我是盲人。如前所述,只能选择multiple preprocessed 图像(不是一个图像)。您可以考虑在资源管理器中添加图像选择的 GIF / 屏幕截图。顺便说一句,使用 Build 2020.3.1 Canary 14。【参考方案15】:

选项 #5:使用图像烘焙器是片状的。我转换了两个图像,它停止了。 我设法转换了 10 张图片:https://nsimage.brosteins.com/

【讨论】:

正是我所发现的,如果您使用 NativeScript,最好的选择【参考方案16】:

我在这个帖子中一直使用这种解决方案,并且使用插件 Android Drawable Importer

很容易

如果您在 MacOS 上使用 Android Studio,只需尝试此步骤即可进入:

点击栏菜单Android Studio然后选择Preferences或点击按钮Command + , 然后选择插件 点击浏览存储库 在搜索栏写Android Drawable Importer 点击安装按钮 然后显示对话框重启,只需重启 Android Studio

在你成功安装插件后,要使用这个插件,只需点击创建新菜单,然后选择Batch Drawable Import。然后单击加号按钮 a.k.a 添加按钮,然后选择您的文件以使其可绘制。然后只需单击 ok 就可以了,drawable 已经完成了所有这些。

如果你对我的话感到困惑,请看learningmechine的图片教程。

【讨论】:

市场上已经没有Android Drawable Importer 插件了。我尝试打开 Android Asset Importer but it crashes 时尝试了它(Android Studio 3.6.1)。我最终使用了appicon.co【参考方案17】:

Android 中的一个简单插件将为您提供帮助 步骤 1. 转到设置 步骤 2. 点击插件 步骤 3. 搜索 Android Drawable Importer Step 4. 安装插件并重启

如何使用?

转到文件>新建>批量可绘制导入

享受

【讨论】:

Android Studio 市场中不再有Android Drawable Importer 插件。

以上是关于有没有办法从大型图像创建 xxhdpi、xhdpi、hdpi、mdpi 和 ldpi 可绘制对象?的主要内容,如果未能解决你的问题,请参考以下文章

为啥程序读取图像文件后分辨率会变小?

一分钟了解Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi

DRAWABLE-V21 中的 Android drawble-xhdpi、drawable-xxhdpi、drawable-xxxhdpi 子文件夹也适用于 DRAWABLE-V23?

Android 背景图像大小(以像素为单位)

一套ui满足ios与android界面

Android UI 设计规范