【问题标题】:Small Size , High Resolution Images小尺寸,高分辨率图像
【发布时间】:2012-12-06 09:05:43
【问题描述】:

我创建了一个名为它的应用程序(应用程序 A),它需要在 res 可绘制文件夹中存储大量高分辨率图像,(我知道我可以远程下载,但我需要将它保存在可绘制 res 文件夹中),它的:

数码相机拍摄的 3000 x 4000 JPEG 图像,因为这会导致应用程序大小不可接受地增加,并导致在设备上运行时内存异常增加,所以我们可以创建另一个名为
(应用程序 B),仅用于调整图像大小,这将 挑选这些图像 将存储在 SD 上 (仅用于调整大小),然后调整大小为更小尺寸的图像,但不会损失图像质量并保持较高的图像分辨率,然后再次将其保存到 SD 使用 PNG 或 JPEG 格式,然后我可以从 SD 卡中获取图像,然后将其保存到(应用程序 A)资源文件并使用它,具有合理的大小和高分辨率,

希望有人能提供 tutoriallink 解释这一点或 完整的代码答案 应用此,

注意:我尝试使用计算机软件作为:photoshop 或格式工厂,但都影响分辨率。

我们将非常感谢您的帮助。

【问题讨论】:

  • 如果您想要较低的分辨率或较小的尺寸,您将失去图像质量。
  • @AHungerArtist i kow 但每张图片的大小约为 4 -5 mb 并使用大约 250 张图片,这会导致应用程序的大小和设备延迟,所以您有什么建议可以解决这个问题,谢谢

标签: java android image image-resizing


【解决方案1】:

最好使用图像平铺解决此问题。你把你的图像分成许多较小的“图块”,比如 500x500 像素,然后在网格上布置 - 选择你最喜欢的布局。对于放大渲染,只会绘制那些在屏幕上的图块。

这里是更多详细信息的参考:How to tile and scroll a large image (10000x10000) in android

要拆分图像,请按照此处的说明进行操作:Android - Split Drawable

为了获得真正流畅的行为,您还可以从原始图像创建一个按比例缩小的图像,并在缩小网格时使用按比例缩小的图块。当用户放大时切换回原始分辨率。

编辑

我的目标是我有 3000*4000 分辨率的大图片,我想将其转换为更小的尺寸但保持相同的分辨率

有几个概念需要牢记:

  1. 图片的原始分辨率(在您的情况下为 3000x4000 像素)
  2. 显示器的分辨率。例如,Nexus 4 的显示屏为 768x1,280 像素。显示器有一个重要的属性:DPI 或每英寸点数。这是物理屏幕上 1 英寸(25.4 毫米)的像素数。 iPhone 上 Apple 的“视网膜”显示屏的 DPI 为 326——这是清晰度的基准;此屏幕上的像素太小,人眼无法在典型的握持距离下单独/清晰地看到。老式单调 LCD 显示器的 DPI 在 30-60 范围内 - 您可以轻松看到各个像素的方形形状。
  3. 要在显示器上显示的图片部分 - 查看端口。有两种不同的极端:

    1. 缩小:您希望在显示屏上显示完整的图片。在您的情况下,图片的像素比显示器多(显示器有一个物理限制,即没有足够的像素以原始分辨率显示原始图片),因此显示器上的一个像素将从图片中渲染一组像素,平均颜色和亮度,或者
    2. 自然分辨率:自然分辨率是指原始图像中的一个像素恰好显示在屏幕上的一个像素上。在您的情况下,您只能看到大约四分之一的图像。这种缩放具有最大的清晰度,但图像的某些细节可能太小而无法看到,因为眼睛实际上无法看到各个显示像素。
    3. 放大:您希望在显示屏上显示更小的图片部分,其中图片的原始像素实际上比显示屏大。在这里,图片中的一个像素将显示在显示屏上的几个或多个像素上。

现在,Android 图像库将提供帮助。当您在显示器上渲染图像时,库将缩放图片以“适合”显示器上的像素 - 您的实际图片不会改变。

我希望通过这种新语言,您可以看到基本限制,从而决定如何进行。

【讨论】:

  • 我支持你的回答....但是你可以使用 1024x1024 的图像...每个安卓手机都支持这个大的位图!
  • 当然 - 根据可用的 RAM,它们将支持 非常 大得多的图像。问题在于 CPU 重新缩放图像的速度。图像越大,速度越慢,因此捏合缩放会非常生涩。对于较小的图像,并放大一小部分,CPU 只需缩放 1kx1k 图像中的一个。
  • @AndrewAlcock 感谢先生的回答,因为我对 android 和 java 开发仍然很陌生,你能向我解释一下吗,我的目标是 3000*4000 分辨率的大图,我想将其转换为更小的尺寸但保持相同的分辨率,再次感谢
  • @Andrew Alcock 感谢先生的回答,因为我对 android 和 java 开发仍然很陌生,请您向我解释一下,我的目标是 3000*4000 分辨率的大图,我想将其转换为尺寸更小,但分辨率相同,再次感谢
  • 添加了关于图像、显示器和视口的讨论
【解决方案2】:

使用BitmapFactory.Options.inSampleSize 读取二次采样位图。

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(pathName, opts);

并使用 Bitmap.compress() 将位图保存到 sdcard。

编辑: 如果你还想保持分辨率,可以尝试设置BitmapFactory.Options.inPreferredConfig = Bitmap.Config.RGB_565;解码位图,这样可以减少一半的内存消耗,因为大多数默认配置是RGB_8888。

【讨论】:

  • 请你写下更详细的代码,关于 1-pick from sd,2-resize,3-save it in png format,谢谢
  • 不,这种方法行不通。 inSampleSize 将改变分辨率并减小尺寸。
  • @Royston Pinto 我是 android 新手,我想在不影响质量的情况下找到正确的解决方案,谢谢
  • 对不起,我没有注意到。但是如果你想保持分辨率,无论你做什么,内存成本都不会改变。
  • 基本上,inSampleSize = 2 将除以 width/2 和 height/2 和 totalSize/4。所以 4MB 的图片会变成 1MB 的图片,宽度和高度减半。
【解决方案3】:

基本上有 3 种方法可以减小图像的大小:

  • 减少它的大小和/或质量(例如通过减少像素数量或每个像素的大小) - Jpeg 的作用与此非常相似。
  • 压缩文件 - 这是 GIF 和 PNG 所做的。
  • 使用矢量图形。

由于您正在谈论进一步压缩数码相机 jpeg 图像,因此您无法在不损失更多质量的情况下进一步缩小图像本身(JPEG 已经降低了质量并压缩了文件,这就是为什么它是最网络上使用的类型)。 任何在不进一步降低质量的情况下压缩文件的尝试都不会为您提供太多支持(尽管您可以尝试几种不同的压缩方案,而且您很少有机会找到正确的方案以大幅降低质量)。

理论上,如果您可以将所有图像一起添加到单个图像中,并将其压缩为单个图像,那么您可能会获得一些基础,但是在谈论这样的尺寸时,您不太可能能够处理这么大的文件。

【讨论】:

    【解决方案4】:

    正如你所说,你已经尝试了 Photoshop 并获得了关于分辨率的不可接受的结果,

    只有在 Photoshop CS 和 CS2 中有一个简单的技巧

    When you want to reduce an image go to the Image> Image Size menu. Click on 
    Resample Image and choose Bicubic Sharper from the drop-down menu. This is the 
    best setting for making sure that an image doesn't blur. The example photo of the
    flower started at 2,000 pixels across. I stepped it down to 250, and then again 
    to 125 with almost no loss of sharpness. 
    

    要记住的另一件事

    when resizing is to try to do it only once on an image.
    Many people will resize repeatedly as they search for the perfect fit for 
    a design element, and then end up with an image with a lot of blur. It's always
    better to experiment on a duplicate of the image. Then, when you've settled on 
    the final dimensions, you can go back to the original and resize it just once.
    

    我已经亲自尝试过,并且得到了很好的小尺寸图像分辨率。

    改编自此链接:http://www.photoshopsupport.com/tutorials/jennifer/bicubic.html

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2014-11-20
      • 2011-11-15
      • 1970-01-01
      相关资源
      最近更新 更多