您的位置:首页 > 娱乐 > 八卦 > 中信建设有限责任公司世界排名_钦州网站推广_广州网站seo地址_网络域名怎么查

中信建设有限责任公司世界排名_钦州网站推广_广州网站seo地址_网络域名怎么查

2025/4/3 13:49:23 来源:https://blog.csdn.net/2301_80329517/article/details/146394929  浏览:    关键词:中信建设有限责任公司世界排名_钦州网站推广_广州网站seo地址_网络域名怎么查
中信建设有限责任公司世界排名_钦州网站推广_广州网站seo地址_网络域名怎么查

1. 质量压缩

原理

质量压缩主要针对像 JPEG 这类支持有损压缩的图片格式。JPEG 格式通过去除人眼不太敏感的图像细节,来实现文件大小的减小。在 Android 里,Bitmapcompress方法能够把Bitmap对象以指定的压缩格式和质量保存到输出流中。质量参数取值范围是 0 - 100,0 代表最低质量(文件最小),100 代表最高质量(文件最大)。

适用场景
  • 当你需要在不改变图片尺寸的前提下减小文件大小时,比如要将图片上传到服务器,为了节省网络流量,可采用质量压缩。
  • 若要在保持图片清晰度的同时减小存储空间,也可以使用这种方法。
优缺点
  • 优点:操作简单,不会改变图片的像素尺寸,能保证图片在视觉上的尺寸不变。
  • 缺点:属于有损压缩,过度压缩会使图片质量明显下降,出现模糊、失真等问题。
代码深入分析
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import java.io.FileOutputStream;
import java.io.IOException;public class BitmapCompression {public static void qualityCompression(Bitmap bitmap, int quality, String filePath) {try {// 创建一个文件输出流,用于将压缩后的图片写入指定文件FileOutputStream fos = new FileOutputStream(filePath);// 调用 compress 方法进行质量压缩bitmap.compress(CompressFormat.JPEG, quality, fos);// 刷新输出流,确保数据全部写入文件fos.flush();// 关闭输出流,释放资源fos.close();} catch (IOException e) {// 捕获并处理可能出现的 IO 异常e.printStackTrace();}}public static void main(String[] args) {// 从文件路径解码得到原始 Bitmap 对象Bitmap originalBitmap = BitmapFactory.decodeFile("path/to/original/image.jpg");// 设定压缩质量,这里设为 50int quality = 50;// 设定输出文件的路径String outputFilePath = "path/to/output/image.jpg";// 调用质量压缩方法qualityCompression(originalBitmap, quality, outputFilePath);}
}

2. 采样率压缩

原理

在 Android 中,加载图片时若直接将大尺寸图片完整加载到内存,会占用大量内存,容易引发内存溢出问题。采样率压缩的核心在于在加载图片时,根据需要的尺寸计算合适的采样率,然后使用该采样率对图片进行解码。采样率 inSampleSize 是一个大于等于 1 的整数,当 inSampleSize 为 1 时,表示不进行采样;当 inSampleSize 为 2 时,表示图片的宽度和高度都变为原来的 1/2,像素数量变为原来的 1/4。

适用场景
  • 当图片尺寸过大,而实际显示区域较小时,例如在列表中显示大量图片,为避免内存溢出,可采用采样率压缩。
  • 加载图片时,若内存有限,需要提前对图片进行压缩处理。
优缺点
  • 优点:能有效减少内存占用,避免内存溢出问题,尤其适用于处理大尺寸图片。
  • 缺点:会降低图片的像素尺寸,图片细节可能会丢失。
代码深入分析
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;public class BitmapCompression {public static Bitmap sampleRateCompression(String filePath, int reqWidth, int reqHeight) {// 创建一个 BitmapFactory.Options 对象,用于设置解码参数BitmapFactory.Options options = new BitmapFactory.Options();// 设置 inJustDecodeBounds 为 true,表示只获取图片的尺寸信息,不加载图片到内存options.inJustDecodeBounds = true;// 第一次解码,获取图片的尺寸信息BitmapFactory.decodeFile(filePath, options);// 调用 calculateInSampleSize 方法计算合适的采样率options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// 设置 inJustDecodeBounds 为 false,表示这次要真正加载图片到内存options.inJustDecodeBounds = false;// 第二次解码,使用计算好的采样率加载图片return BitmapFactory.decodeFile(filePath, options);}private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {// 获取原始图片的高度final int height = options.outHeight;// 获取原始图片的宽度final int width = options.outWidth;// 初始化采样率为 1int inSampleSize = 1;if (height > reqHeight || width > reqWidth) {// 计算原始图片高度的一半final int halfHeight = height / 2;// 计算原始图片宽度的一半final int halfWidth = width / 2;// 循环计算满足要求的最大采样率while ((halfHeight / inSampleSize) >= reqHeight&& (halfWidth / inSampleSize) >= reqWidth) {inSampleSize *= 2;}}return inSampleSize;}public static void main(String[] args) {// 图片的文件路径String imagePath = "path/to/original/image.jpg";// 需要的图片宽度int reqWidth = 200;// 需要的图片高度int reqHeight = 200;// 调用采样率压缩方法Bitmap compressedBitmap = sampleRateCompression(imagePath, reqWidth, reqHeight);}
}

3. 缩放压缩

原理

缩放压缩是通过对 Bitmap 对象进行缩放操作来改变图片的像素尺寸。Bitmap.createScaledBitmap 方法会根据指定的缩放比例创建一个新的 Bitmap 对象,新的 Bitmap 对象的宽度和高度会根据缩放比例进行调整。

适用场景
  • 当需要调整图片的尺寸以适应特定的显示区域时,例如将图片显示在一个固定大小的 ImageView 中。
  • 对图片进行裁剪或调整比例时,可使用缩放压缩。
优缺点
  • 优点:可以精确控制图片的尺寸,能满足不同的显示需求。
  • 缺点:会改变图片的像素尺寸,可能会导致图片失真,尤其是在缩放比例较大时。
代码深入分析
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;public class BitmapCompression {public static Bitmap scaleCompression(Bitmap bitmap, float scaleX, float scaleY) {// 获取原始 Bitmap 的宽度int width = bitmap.getWidth();// 获取原始 Bitmap 的高度int height = bitmap.getHeight();// 计算缩放后的宽度int newWidth = (int) (width * scaleX);// 计算缩放后的高度int newHeight = (int) (height * scaleY);// 调用 createScaledBitmap 方法进行缩放操作return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);}public static void main(String[] args) {// 从文件路径解码得到原始 Bitmap 对象Bitmap originalBitmap = BitmapFactory.decodeFile("path/to/original/image.jpg");// 水平缩放比例,这里设为 0.5float scaleX = 0.5f;// 垂直缩放比例,这里设为 0.5float scaleY = 0.5f;// 调用缩放压缩方法Bitmap compressedBitmap = scaleCompression(originalBitmap, scaleX, scaleY);}
}

希望可以帮助你学习Android,感谢观看!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com