/**
* 图片加工厂
*
* @author way
*
*/
public class ImageUtil {
/**
* 通过路径获取输入流
*
* @param path
* 路径
* @return 输入流
* @throws Exception
* 异常
*/
public static InputStream getRequest(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
return conn.getInputStream();
}
return null;
} /**
* 从流中读取二进制数据
*
* @param inStream
* 输入流
* @return 二进制数据
* @throws Exception
* 异常
*/
public static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
} /**
* 把一个路径转换成Drawable对象
*
* @param url
* 路径
* @return Drawable对象
*/
public static Drawable loadImageFromUrl(String url) {
URL m;
InputStream i = null;
try {
m = new URL(url);
i = (InputStream) m.getContent();
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Drawable d = Drawable.createFromStream(i, "src");
return d;
} /**
* 把一个路径转换成Drawable对象
*
* @param url
* 字符串路径
* @return Drawable对象
* @throws Exception
* 异常
*/
public static Drawable getDrawableFromUrl(String url) throws Exception {
return Drawable.createFromStream(getRequest(url), null);
} /**
* 从路径中得到位图
*
* @param url
* 字符串路径
* @return 位图
* @throws Exception
* 异常
*/
public static Bitmap getBitmapFromUrl(String url) throws Exception {
byte[] bytes = getBytesFromUrl(url);
return byteToBitmap(bytes);
} /**
* 从路径中得到圆角位图
*
* @param url
* 字符串路径
* @param pixels
* 圆角弧度
* @return 圆角位图
* @throws Exception
* 异常
*/
public static Bitmap getRoundBitmapFromUrl(String url, int pixels)
throws Exception {
byte[] bytes = getBytesFromUrl(url);
Bitmap bitmap = byteToBitmap(bytes);
return toRoundCorner(bitmap, pixels);
} /**
* 从路径中得到圆角Drawable对象
*
* @param url
* 字符串路径
* @param pixels
* 圆角弧度
* @return 圆角Drawable对象
* @throws Exception
* 异常
*/
public static Drawable geRoundDrawableFromUrl(String url, int pixels)
throws Exception {
byte[] bytes = getBytesFromUrl(url);
BitmapDrawable bitmapDrawable = (BitmapDrawable) byteToDrawable(bytes);
return toRoundCorner(bitmapDrawable, pixels);
} /**
* 从路径中得到二进制数据
*
* @param url
* 字符串路径
* @return 二进制数据
* @throws Exception
* 异常
*/
public static byte[] getBytesFromUrl(String url) throws Exception {
return readInputStream(getRequest(url));
} /**
* 从二进制数据中得到位图
*
* @param byteArray
* 二进制数据
* @return 位图
*/
public static Bitmap byteToBitmap(byte[] byteArray) {
if (byteArray.length != 0) {
return BitmapFactory
.decodeByteArray(byteArray, 0, byteArray.length);
} else {
return null;
}
} /**
* 从二进制数据中得到Drawable对象
*
* @param byteArray
* 二进制数据
* @return Drawable对象
*/
public static Drawable byteToDrawable(byte[] byteArray) {
ByteArrayInputStream ins = new ByteArrayInputStream(byteArray);
return Drawable.createFromStream(ins, null);
} /**
* 把位图转换称二进制数据
*
* @param bm
* 位图
* @return 二进制数据
*/
public static byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
} /**
* 把Drawable对象转换称位图
*
* @param drawable
* Drawable对象
* @return 位图
*/
public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
} /**
* 图片去色,返回灰度图片
*
* @param bmpOriginal
* 传入的图片
* @return 去色后的图片
*/
public static Bitmap toGrayscale(Bitmap bmpOriginal) {
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
} /**
* 去色同时加圆角
*
* @param bmpOriginal
* 原图
* @param pixels
* 圆角弧度
* @return 修改后的图片
*/
public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
return toRoundCorner(toGrayscale(bmpOriginal), pixels);
} /**
* 把位图变成圆角位图
*
* @param bitmap
* 需要修改的位图
* @param pixels
* 圆角的弧度
* @return 圆角位图
*/
public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output); final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels; paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint); return output;
} /**
* 将BitampDrawable转换成圆角的BitampDrawable
*
* @param bitmapDrawable
* 原生BitampDrawable对象
* @param pixels
* 圆角弧度
* @return 圆角BitampDrawable对象
*/
public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable,
int pixels) {
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));
return bitmapDrawable;
} /**
* 图片水印生成的方法
*
* @param src
* 源图片位图
* @param watermark
* 水印图片位图
* @return 返回一个加了水印的图片
*/
public static Bitmap createBitmap(Bitmap src, Bitmap watermark) {
if (src == null)
return null;
int w = src.getWidth();
int h = src.getHeight();
int ww = watermark.getWidth();
int wh = watermark.getHeight();
Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
Canvas cv = new Canvas(newb);// 初始化画布
cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src
cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);// 在src的右下角画入水印
cv.save(Canvas.ALL_SAVE_FLAG);// 保存,用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。
cv.restore();// 存储,用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
return newb;
}
}

android 工具类之图片加工的更多相关文章

  1. java常用开发工具类之 图片水印,文字水印,缩放,补白工具类

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  2. 摘录android工具类

    import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.Pac ...

  3. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  4. [Android Pro] 常用的android工具类和库

    reference to  : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...

  5. android 工具类 数据库管理

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xuduzhoud/article/details/27540301 数据库工具类,优雅的管理andr ...

  6. Android 工具类大全

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311 1.日志工具类L.java package com.zhy.uti ...

  7. 【Android 工具类】经常使用工具类(方法)大全

    收集经常使用的工具类或者方法: 1.获取手机分辨率 /** * 获取手机分辨率 */ public static String getDisplayMetrix(Context context) { ...

  8. Java常用工具类---image图片处理工具类、Json工具类

    package com.jarvis.base.util; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStre ...

  9. 二、工具类ImageUtil——图片处理

    这个工具类完成的工作如下: 1.第一个static方法,完成图片格式的转换.统一转换成.jpg格式. package util; import java.awt.Toolkit; import jav ...

随机推荐

  1. 《Unix网络编程》卷2 读书笔记 第1章-简介

    1. 概述 2. 进程.线程与信息共享 Unix进程间的信息共享有多种方式:注意下图中内核的位置   左边的两个进程共享存留于文件系统中某个文件上的某些信息.为访问这些信息,每个进程都得穿越内核. 中 ...

  2. Word2003使用VBA教程

    [正文] 注:本文中所有vba代码都是储存在doc中,而非normal.dot 1.打开一个.doc文档 2.按ALT+F11 3.左侧 Project-插入-模块 4.输入自己的代码,一定要是函数的 ...

  3. JS URL编码

    JS URL编码escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在 ...

  4. [转] C# TextBox、DataGrideView中的数据绑定

    Xavierr 原文 C#数据绑定——简单的文本框绑定.DataGridView 一.TextBox的数据绑定 经常写用一个TextBox显示某个对象,然后编辑之后再保存的程序.以前都是在TextBo ...

  5. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)

    BSD开源协议(original  BSD license.FreeBSD  license.Original  BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...

  6. [转]linux之nl命令

    转自:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容 ...

  7. Python 异常相关参考

    Python所有的异常都是从BaseException类派生的,常见的错误类型和继承关系如下: BaseException +-- SystemExit +-- KeyboardInterrupt + ...

  8. 使用json格式的数据进行通信

    4 Java对象转换成JSON 4.1 问题 将Java对象转换成符合JSON格式的字符串,并测试. 4.2 方案 使用与json-lib.jar相关的jar文件完成类型的转换. 4.3 步骤 步骤一 ...

  9. .NET中的Newtonsoft.Json.JsonConvert.SerializeObject(string a)

    1.將string a 序列化為Json格式: 2.使用條件:將Newtonsoft.Json.dll作為引用添加到項目中.下载地址在这:http://json.codeplex.com/

  10. Java 面向对象概念

    Interface 接口 An interface defines a protocol of communication between two objects. An interface decl ...