`
15050855750
  • 浏览: 8521 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

照片缩放和缩略图

 
阅读更多
java

private Bitmap comp(Bitmap image) {
		
		ByteArrayOutputStream baos = new ByteArrayOutputStream();		
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
		if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出	
			baos.reset();//重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
		BitmapFactory.Options newOpts = new BitmapFactory.Options();
		//开始读入图片,此时把options.inJustDecodeBounds 设回true了
		newOpts.inJustDecodeBounds = true;
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
		newOpts.inJustDecodeBounds = false;
		int w = newOpts.outWidth;
		int h = newOpts.outHeight;
		//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
		float hh = 800f;//这里设置高度为800f
		float ww =580f;//这里设置宽度为480f
		//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
		int be = 1;//be=1表示不缩放
		if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
			be = (int) (newOpts.outWidth / ww);
		} else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
			be = (int) (newOpts.outHeight / hh);
		}
		if (be <= 0)
			be = 1;
		newOpts.inSampleSize = be;//设置缩放比例
		//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
		isBm = new ByteArrayInputStream(baos.toByteArray());
		bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
		return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
	}
	

private Bitmap compressImage(Bitmap image) {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
		int options = 100;
		while ( baos.toByteArray().length / 1024>300) {	//循环判断如果压缩后图片是否大于100kb,大于继续压缩		
			baos.reset();//重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
			options -= 10;//每次都减少10
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
		return bitmap;
	}


缩略图
public static Bitmap getImageThumbnail(String imagePath, int width,
			int height) {
		Bitmap bitmap = null;
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inPreferredConfig = Bitmap.Config.ARGB_4444;
		options.inPurgeable = true;
		options.inInputShareable = true;
		options.inJustDecodeBounds = true;
		// 获取这个图片的宽和高,注意此处的bitmap为null
		bitmap = BitmapFactory.decodeFile(imagePath, options);
		options.inJustDecodeBounds = false; // 设为 false
		// 计算缩放比
		int h = options.outHeight;
		int w = options.outWidth;
		int beWidth = w / width;
		int beHeight = h / height;
		int be = 1;
		if (beWidth < beHeight) {
			be = beWidth;
		} else {
			be = beHeight;
		}
		if (be <= 0) {
			be = 1;
		}
		options.inSampleSize = be;
		// 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false
		bitmap = BitmapFactory.decodeFile(imagePath, options);
		// 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
		bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
				ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
		return bitmap;
	}

	// 可用于生成缩略图。
	/**
	 * Creates a centered bitmap of the desired size. Recycles the input.
	 * 
	 * @param source
	 */
	public static Bitmap extractMiniThumb(String imagePath, int width,
			int height) {
		// return extractMiniThumb(source, width, height, true);
		return getImageThumbnail(imagePath, width, height);
	}

分享到:
评论

相关推荐

    ANDROID 获取最近的相片的缩略图

    生成缩略图则可以自由控制缩放比例和质量,但相对耗时。以下是使用requestThumbnail的示例: ```java long imageId = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID)); Uri thumbUri = Uri....

    图片缩略图展示图片缩略图展示图片缩略图展示

    图片缩略图在IT行业中是图像处理和网页设计的关键元素,尤其在展示大量图片时,如照片库、电商网站或社交媒体平台。它们提供了一个高效且直观的方式,让用户快速浏览和预览图片内容,而无需加载完整大小的图像,从而...

    上传图片(缩略图)

    - **尺寸调整**:缩略图通常是原图的一个小版本,可以通过设定宽度和高度来裁剪或按比例缩放图片。 - **保持比例**:为避免拉伸或变形,缩略图的生成通常会根据原图宽高比进行等比例缩放。 - **质量控制**:生成...

    朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)

    - 缩略图可以有效降低内存占用,提升用户体验,但也要注意保持清晰度,避免因缩放导致的模糊。 6. **点击缩略图删除对应文件**: - 当用户点击缩略图时,应用需要识别该缩略图对应的原始图片,并执行删除操作。这...

    浏览图像缩略图

    2. **照片管理**:如Adobe Lightroom、Google Photos等,缩略图帮助用户快速浏览和选择照片。 3. **桌面环境**:Windows、macOS等操作系统的文件管理器显示文件夹内的缩略图预览。 4. **电商网站**:商品图片通常以...

    图片缩略图展开

    在IT领域,图片缩略图展开是一个常见的操作,特别是在网页设计、图像处理和多媒体应用中。这个过程涉及到从一个小尺寸的预览图像(缩略图)恢复到原始的大尺寸图片,以便用户可以查看细节或者进行编辑。下面我们将...

    jQuery网格缩略图片点击大小缩放图片切换代码

    本主题涉及的是利用jQuery实现一个功能:当用户在网格布局中的缩略图上点击时,图片会放大并进行切换,以展示更多细节。这种效果在产品展示、照片画廊或任何需要图片预览的场景都非常常见。 首先,我们需要理解这个...

    php生成图片缩略图代码类.zip

    以上代码创建了一个新的缩略图类实例,设置了源图和目标图路径,以及目标尺寸,然后调用`generate()`方法生成缩略图。 在实际应用中,你可能需要考虑更多的细节,比如错误处理、图像格式检查、透明度处理等。此外,...

    Android仿微信添加照片并且随意限制照片数量并显示缩略图界面

    缩略图的生成可以使用Bitmap的缩放方法,以减少内存消耗。同时,为了提高用户体验,可能还需要实现滑动加载更多、平滑滚动等特性。 在"TakePhotoAdapter"这个文件名中,我们可以推测这可能是一个适配器类,用于将...

    缩略图批量生成器 (C# 附源码)

    【标签】"(C# 缩略图批量生成器 附源码)"进一步明确了该程序的关键技术点:C#语言和缩略图生成。C#是微软开发的一种现代编程语言,它的语法简洁明了,适合开发高性能的应用程序。而缩略图生成则是图像处理领域的一个...

    批量缩略图工具 2.7.rar

    用户可以根据需要设置缩略图的宽度、高度或者按照比例缩放。此外,还可以选择保持原图宽高比,避免因强制拉伸导致的图片变形。对于那些需要固定尺寸的场景,比如社交媒体分享、网站上传等,这个功能尤其实用。 再者...

    C#批量生成缩略图,指定位置图片位置

    在实际应用中,例如在网站开发、照片库管理软件或者多媒体应用程序中,都需要对大量图片进行预览处理,生成缩略图以节省显示资源和提高用户体验。 批量生成缩略图的核心在于读取原始图片文件,根据设定的尺寸比例...

    缩略图生成,支持所有常用格式图片,已测试

    在实际应用中,缩略图生成有多种用途,如在网页中展示图片预览、在文件管理器中快速浏览图片、在社交媒体平台显示照片缩略图等。而使用GDI+作为图像处理工具,不仅可以生成缩略图,还能进行更复杂的图像操作,例如...

    头像上传插件 带裁切 缩略图,旋转等功能

    3. **缩略图生成**:缩略图是为了节省存储空间和提高页面加载速度,将大图按比例缩小生成的小图。在前端,可以使用JavaScript库如sharp或canvas来实时生成缩略图;在后端,服务端语言如PHP、Node.js也可以通过相应库...

    Delphi编写的批量制作缩略图的工具..rar

    总的来说,这个“批量制作缩略图的工具”展示了Delphi在图像处理和文件操作方面的强大能力,同时也体现了Delphi在快速开发高效、可定制应用程序上的优势。对于那些熟悉Delphi并需要处理大量图像的用户来说,这样的...

    jQuery实现的效果非凡的缩略图可放大显示的照片墙效果

    1. **HTML结构**:在HTML中,为每张图片创建一个容器,包含缩略图和隐藏的全尺寸图片。容器可以通过CSS进行定位和样式化。 2. **jQuery绑定**:使用jQuery选择器选择所有图片容器,并为它们添加点击事件监听器。当...

    缩略图 图片预览

    在IT行业中,缩略图和图片预览是两个非常重要的概念,特别是在图像处理和用户界面设计上。这里我们将深入探讨这两个知识点,以及如何在VC++(Visual C++)环境中实现它们。 首先,缩略图是一种小型的图像表示,通常...

    批量缩略图工具 BatchPic 2.95 绿色无限制

    **批量缩略图工具 BatchPic 2.95 绿色无限制** BatchPic 是一款高效实用的批量图像处理软件,特别适用于需要对大量图片进行相同或类似操作的情况,如调整尺寸、添加水印、转换格式等。版本 2.95 是其更新的一个稳定...

    图片水印及缩略图

    生成缩略图的方法主要有两种:等比例缩放和固定尺寸裁剪。等比例缩放保持原图的比例,避免拉伸变形,而固定尺寸裁剪则可能需要对超出目标尺寸的部分进行裁剪。例如,我们可以利用PIL库中的resize()函数实现等比例...

    邮件类,mysql数据库连接类,自动生成水印缩略图类

    这个类可以帮助开发者自动对图像进行缩放,生成适应不同场景的缩略图,同时还能添加水印,保护版权或者增加品牌标识。水印可以是文字、图像或透明度调整,位置也可以自由设定,以满足不同的设计需求。 这三个类文件...

Global site tag (gtag.js) - Google Analytics