多张图片四个方位的图片合成,改变bitmap大小,图片去色等功能

  1. packagecom.dzh.operateimage;
  2. importandroid.graphics.Bitmap;
  3. importandroid.graphics.Bitmap.Config;
  4. importandroid.graphics.BitmapFactory;
  5. importandroid.graphics.Canvas;
  6. importandroid.graphics.ColorMatrix;
  7. importandroid.graphics.ColorMatrixColorFilter;
  8. importandroid.graphics.Paint;
  9. importandroid.graphics.PorterDuff.Mode;
  10. importandroid.graphics.PorterDuffXfermode;
  11. importandroid.graphics.Rect;
  12. importandroid.graphics.RectF;
  13. importandroid.graphics.drawable.BitmapDrawable;
  14. importandroid.graphics.drawable.Drawable;
  15. importjava.io.ByteArrayOutputStream;
  16. importjava.io.File;
  17. importjava.io.FileNotFoundException;
  18. importjava.io.FileOutputStream;
  19. importjava.io.IOException;
  20. /**
  21. *处理图片的工具类.
  22. */
  23. publicclassImageTools{
  24. publicstaticfinalintLEFT=0;
  25. publicstaticfinalintRIGHT=1;
  26. publicstaticfinalintTOP=3;
  27. publicstaticfinalintBOTTOM=4;
  28. /***/
  29. /**
  30. *图片去色,返回灰度图片
  31. *
  32. *@parambmpOriginal传入的图片
  33. *@return去色后的图片
  34. */
  35. publicstaticBitmaptoGrayscale(BitmapbmpOriginal){
  36. intwidth,height;
  37. height=bmpOriginal.getHeight();
  38. width=bmpOriginal.getWidth();
  39. BitmapbmpGrayscale=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
  40. Canvasc=newCanvas(bmpGrayscale);
  41. Paintpaint=newPaint();
  42. ColorMatrixcm=newColorMatrix();
  43. cm.setSaturation(0);
  44. ColorMatrixColorFilterf=newColorMatrixColorFilter(cm);
  45. paint.setColorFilter(f);
  46. c.drawBitmap(bmpOriginal,0,0,paint);
  47. returnbmpGrayscale;
  48. }
  49. /***/
  50. /**
  51. *去色同时加圆角
  52. *
  53. *@parambmpOriginal原图
  54. *@parampixels圆角弧度
  55. *@return修改后的图片
  56. */
  57. publicstaticBitmaptoGrayscale(BitmapbmpOriginal,intpixels){
  58. returntoRoundCorner(toGrayscale(bmpOriginal),pixels);
  59. }
  60. /***/
  61. /**
  62. *把图片变成圆角
  63. *
  64. *@parambitmap需要修改的图片
  65. *@parampixels圆角的弧度
  66. *@return圆角图片
  67. */
  68. publicstaticBitmaptoRoundCorner(Bitmapbitmap,intpixels){
  69. Bitmapoutput=Bitmap
  70. .createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
  71. Canvascanvas=newCanvas(output);
  72. finalintcolor=0xff424242;
  73. finalPaintpaint=newPaint();
  74. finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
  75. finalRectFrectF=newRectF(rect);
  76. finalfloatroundPx=pixels;
  77. paint.setAntiAlias(true);
  78. canvas.drawARGB(0,0,0,0);
  79. paint.setColor(color);
  80. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  81. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  82. canvas.drawBitmap(bitmap,rect,rect,paint);
  83. returnoutput;
  84. }
  85. /***/
  86. /**
  87. *使圆角功能支持BitampDrawable
  88. *
  89. *@parambitmapDrawable
  90. *@parampixels
  91. *@return
  92. */
  93. publicstaticBitmapDrawabletoRoundCorner(BitmapDrawablebitmapDrawable,intpixels){
  94. Bitmapbitmap=bitmapDrawable.getBitmap();
  95. bitmapDrawable=newBitmapDrawable(toRoundCorner(bitmap,pixels));
  96. returnbitmapDrawable;
  97. }
  98. /**
  99. *读取路径中的图片,然后将其转化为缩放后的bitmap
  100. *
  101. *@parampath
  102. */
  103. publicstaticvoidsaveBefore(Stringpath){
  104. BitmapFactory.Optionsoptions=newBitmapFactory.Options();
  105. options.inJustDecodeBounds=true;
  106. //获取这个图片的宽和高
  107. Bitmapbitmap=BitmapFactory.decodeFile(path,options);//此时返回bm为空
  108. options.inJustDecodeBounds=false;
  109. //计算缩放比
  110. intbe=(int)(options.outHeight/(float)200);
  111. if(be<=0)
  112. be=1;
  113. options.inSampleSize=2;//图片长宽各缩小二分之一
  114. //重新读入图片,注意这次要把options.inJustDecodeBounds设为false哦
  115. bitmap=BitmapFactory.decodeFile(path,options);
  116. intw=bitmap.getWidth();
  117. inth=bitmap.getHeight();
  118. System.out.println(w+""+h);
  119. //savePNG_After(bitmap,path);
  120. saveJPGE_After(bitmap,path);
  121. }
  122. /**
  123. *保存图片为PNG
  124. *
  125. *@parambitmap
  126. *@paramname
  127. */
  128. publicstaticvoidsavePNG_After(Bitmapbitmap,Stringname){
  129. Filefile=newFile(name);
  130. try{
  131. FileOutputStreamout=newFileOutputStream(file);
  132. if(bitmap.compress(Bitmap.CompressFormat.PNG,100,out)){
  133. out.flush();
  134. out.close();
  135. }
  136. }catch(FileNotFoundExceptione){
  137. e.printStackTrace();
  138. }catch(IOExceptione){
  139. e.printStackTrace();
  140. }
  141. }
  142. /**
  143. *保存图片为JPEG
  144. *
  145. *@parambitmap
  146. *@parampath
  147. */
  148. publicstaticvoidsaveJPGE_After(Bitmapbitmap,Stringpath){
  149. Filefile=newFile(path);
  150. try{
  151. FileOutputStreamout=newFileOutputStream(file);
  152. if(bitmap.compress(Bitmap.CompressFormat.JPEG,100,out)){
  153. out.flush();
  154. out.close();
  155. }
  156. }catch(FileNotFoundExceptione){
  157. e.printStackTrace();
  158. }catch(IOExceptione){
  159. e.printStackTrace();
  160. }
  161. }
  162. /**
  163. *水印
  164. *
  165. *@parambitmap
  166. *@return
  167. */
  168. publicstaticBitmapcreateBitmapForWatermark(Bitmapsrc,Bitmapwatermark){
  169. if(src==null){
  170. returnnull;
  171. }
  172. intw=src.getWidth();
  173. inth=src.getHeight();
  174. intww=watermark.getWidth();
  175. intwh=watermark.getHeight();
  176. //createthenewblankbitmap
  177. Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
  178. Canvascv=newCanvas(newb);
  179. //drawsrcinto
  180. cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
  181. //drawwatermarkinto
  182. cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//在src的右下角画入水印
  183. //saveallclip
  184. cv.save(Canvas.ALL_SAVE_FLAG);//保存
  185. //store
  186. cv.restore();//存储
  187. returnnewb;
  188. }
  189. /**
  190. *图片合成
  191. *
  192. *@return
  193. */
  194. publicstaticBitmappotoMix(intdirection,Bitmap...bitmaps){
  195. if(bitmaps.length<=0){
  196. returnnull;
  197. }
  198. if(bitmaps.length==1){
  199. returnbitmaps[0];
  200. }
  201. BitmapnewBitmap=bitmaps[0];
  202. //newBitmap=createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);
  203. for(inti=1;i<bitmaps.length;i++){
  204. newBitmap=createBitmapForFotoMix(newBitmap,bitmaps[i],direction);
  205. }
  206. returnnewBitmap;
  207. }
  208. privatestaticBitmapcreateBitmapForFotoMix(Bitmapfirst,Bitmapsecond,intdirection){
  209. if(first==null){
  210. returnnull;
  211. }
  212. if(second==null){
  213. returnfirst;
  214. }
  215. intfw=first.getWidth();
  216. intfh=first.getHeight();
  217. intsw=second.getWidth();
  218. intsh=second.getHeight();
  219. BitmapnewBitmap=null;
  220. if(direction==LEFT){
  221. newBitmap=Bitmap.createBitmap(fw+sw,fh>sh?fh:sh,Config.ARGB_8888);
  222. Canvascanvas=newCanvas(newBitmap);
  223. canvas.drawBitmap(first,sw,0,null);
  224. canvas.drawBitmap(second,0,0,null);
  225. }elseif(direction==RIGHT){
  226. newBitmap=Bitmap.createBitmap(fw+sw,fh>sh?fh:sh,Config.ARGB_8888);
  227. Canvascanvas=newCanvas(newBitmap);
  228. canvas.drawBitmap(first,0,0,null);
  229. canvas.drawBitmap(second,fw,0,null);
  230. }elseif(direction==TOP){
  231. newBitmap=Bitmap.createBitmap(sw>fw?sw:fw,fh+sh,Config.ARGB_8888);
  232. Canvascanvas=newCanvas(newBitmap);
  233. canvas.drawBitmap(first,0,sh,null);
  234. canvas.drawBitmap(second,0,0,null);
  235. }elseif(direction==BOTTOM){
  236. newBitmap=Bitmap.createBitmap(sw>fw?sw:fw,fh+sh,Config.ARGB_8888);
  237. Canvascanvas=newCanvas(newBitmap);
  238. canvas.drawBitmap(first,0,0,null);
  239. canvas.drawBitmap(second,0,fh,null);
  240. }
  241. returnnewBitmap;
  242. }
  243. /**
  244. *将Bitmap转换成指定大小
  245. *@parambitmap
  246. *@paramwidth
  247. *@paramheight
  248. *@return
  249. */
  250. publicstaticBitmapcreateBitmapBySize(Bitmapbitmap,intwidth,intheight)
  251. {
  252. returnBitmap.createScaledBitmap(bitmap,width,height,true);
  253. }
  254. /**
  255. *Drawable转Bitmap
  256. *
  257. *@paramdrawable
  258. *@return
  259. */
  260. publicstaticBitmapdrawableToBitmapByBD(Drawabledrawable){
  261. BitmapDrawablebitmapDrawable=(BitmapDrawable)drawable;
  262. returnbitmapDrawable.getBitmap();
  263. }
  264. /**
  265. *Bitmap转Drawable
  266. *
  267. *@parambitmap
  268. *@return
  269. */
  270. publicstaticDrawablebitmapToDrawableByBD(Bitmapbitmap){
  271. Drawabledrawable=newBitmapDrawable(bitmap);
  272. returndrawable;
  273. }
  274. /**
  275. *byte[]转bitmap
  276. *
  277. *@paramb
  278. *@return
  279. */
  280. publicstaticBitmapbytesToBimap(byte[]b){
  281. if(b.length!=0){
  282. returnBitmapFactory.decodeByteArray(b,0,b.length);
  283. }else{
  284. returnnull;
  285. }
  286. }
  287. /**
  288. *bitmap转byte[]
  289. *
  290. *@parambm
  291. *@return
  292. */
  293. publicstaticbyte[]bitmapToBytes(Bitmapbm){
  294. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  295. bm.compress(Bitmap.CompressFormat.PNG,100,baos);
  296. returnbaos.toByteArray();
  297. }
  298. }

更多相关文章

  1. android 解决RecyclerView notifyDataSetChanged刷新闪屏问题(图
  2. android最简单的生成二维码demo
  3. ImagePicker,Android下的图片选择与裁剪
  4. android 图片查看器,可通过多点触控实现缩放
  5. Android常用开源库
  6. Android(安卓)开发常用的工具网站
  7. 转发:bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化
  8. Android之网络操作 - 从网络获取图片或网页
  9. android中将路径设为文字加图片的形式

随机推荐

  1. Conflict with dependency 'com.android.
  2. 为什么自定义ViewGroup ondraw方法不会被
  3. Android异步Http客户端 一个基于回调的Ht
  4. Android中处理代码未捕获异常
  5. Android中获取CPU序列号
  6. android build error
  7. android Gallery 仿iPhone 图片滑动
  8. Android/Linux 的时间和定时器
  9. Android读取assests目录下文件
  10. Android(安卓)Push Notification实现信息