当前位置: 代码迷 >> Android >> Android中图片的处置(放大缩小,去色,转换格式,增加水印等)
  详细解决方案

Android中图片的处置(放大缩小,去色,转换格式,增加水印等)

热度:100   发布时间:2016-05-01 20:43:11.0
Android中图片的处理(放大缩小,去色,转换格式,增加水印等)

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

?

?

?

?

?

  1. package?com.dzh.operateimage; ??
  2. import?android.graphics.Bitmap; ??
  3. import?android.graphics.Bitmap.Config; ??
  4. import?android.graphics.BitmapFactory; ??
  5. import?android.graphics.Canvas; ??
  6. import?android.graphics.ColorMatrix; ??
  7. import?android.graphics.ColorMatrixColorFilter; ??
  8. import?android.graphics.Paint; ??
  9. import?android.graphics.PorterDuff.Mode; ??
  10. import?android.graphics.PorterDuffXfermode; ??
  11. import?android.graphics.Rect; ??
  12. import?android.graphics.RectF; ??
  13. import?android.graphics.drawable.BitmapDrawable; ??
  14. import?android.graphics.drawable.Drawable; ??
  15. import?java.io.ByteArrayOutputStream; ??
  16. import?java.io.File; ??
  17. import?java.io.FileNotFoundException; ??
  18. import?java.io.FileOutputStream; ??
  19. import?java.io.IOException; ??
  20. /**??
  21. *?处理图片的工具类.??
  22. */??
  23. public?class?ImageTools?{ ??
  24. public?static?final?int?LEFT?=?0; ??
  25. public?static?final?int?RIGHT?=?1; ??
  26. public?static?final?int?TOP?=?3; ??
  27. public?static?final?int?BOTTOM?=?4; ??
  28. /**?*/??
  29. /**??
  30. *?图片去色,返回灰度图片??
  31. *???
  32. [email protected]?
  33. [email protected]?
  34. */??
  35. public?static?Bitmap?toGrayscale(Bitmap?bmpOriginal)?{ ??
  36. int?width,?height; ??
  37. height?=?bmpOriginal.getHeight(); ??
  38. width?=?bmpOriginal.getWidth(); ??
  39. Bitmap?bmpGrayscale?=?Bitmap.createBitmap(width,?height,?Bitmap.Config.RGB_565); ??
  40. Canvas?c?=?new?Canvas(bmpGrayscale); ??
  41. Paint?paint?=?new?Paint(); ??
  42. ColorMatrix?cm?=?new?ColorMatrix(); ??
  43. cm.setSaturation(0); ??
  44. ColorMatrixColorFilter?f?=?new?ColorMatrixColorFilter(cm); ??
  45. paint.setColorFilter(f); ??
  46. c.drawBitmap(bmpOriginal,?0,?0,?paint); ??
  47. return?bmpGrayscale; ??
  48. } ??
  49. /**?*/??
  50. /**??
  51. *?去色同时加圆角??
  52. *???
  53. [email protected]?
  54. [email protected]?
  55. [email protected]?
  56. */??
  57. public?static?Bitmap?toGrayscale(Bitmap?bmpOriginal,?int?pixels)?{ ??
  58. return?toRoundCorner(toGrayscale(bmpOriginal),?pixels); ??
  59. } ??
  60. /**?*/??
  61. /**??
  62. *?把图片变成圆角??
  63. *???
  64. [email protected]?
  65. [email protected]?
  66. [email protected]?
  67. */??
  68. public?static?Bitmap?toRoundCorner(Bitmap?bitmap,?int?pixels)?{ ??
  69. Bitmap?output?=?Bitmap ??
  70. .createBitmap(bitmap.getWidth(),?bitmap.getHeight(),?Config.ARGB_8888); ??
  71. Canvas?canvas?=?new?Canvas(output); ??
  72. final?int?color?=?0xff424242; ??
  73. final?Paint?paint?=?new?Paint(); ??
  74. final?Rect?rect?=?new?Rect(0,?0,?bitmap.getWidth(),?bitmap.getHeight()); ??
  75. final?RectF?rectF?=?new?RectF(rect); ??
  76. final?float?roundPx?=?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(new?PorterDuffXfermode(Mode.SRC_IN)); ??
  82. canvas.drawBitmap(bitmap,?rect,?rect,?paint); ??
  83. return?output; ??
  84. } ??
  85. /**?*/??
  86. /**??
  87. *?使圆角功能支持BitampDrawable??
  88. *???
  89. [email protected]?
  90. [email protected]?
  91. [email protected]?
  92. */??
  93. public?static?BitmapDrawable?toRoundCorner(BitmapDrawable?bitmapDrawable,?int?pixels)?{ ??
  94. Bitmap?bitmap?=?bitmapDrawable.getBitmap(); ??
  95. bitmapDrawable?=?new?BitmapDrawable(toRoundCorner(bitmap,?pixels)); ??
  96. return?bitmapDrawable; ??
  97. } ??
  98. /**??
  99. *?读取路径中的图片,然后将其转化为缩放后的bitmap??
  100. *???
  101. [email protected]?
  102. */??
  103. public?static?void?saveBefore(String?path)?{ ??
  104. BitmapFactory.Options?options?=?new?BitmapFactory.Options(); ??
  105. options.inJustDecodeBounds?=?true; ??
  106. //?获取这个图片的宽和高???
  107. Bitmap?bitmap?=?BitmapFactory.decodeFile(path,?options);?//?此时返回bm为空???
  108. options.inJustDecodeBounds?=?false; ??
  109. //?计算缩放比???
  110. int?be?=?(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. int?w?=?bitmap.getWidth(); ??
  117. int?h?=?bitmap.getHeight(); ??
  118. System.out.println(w?+?"?"?+?h); ??
  119. //?savePNG_After(bitmap,path);???
  120. saveJPGE_After(bitmap,?path); ??
  121. } ??
  122. /**??
  123. *?保存图片为PNG??
  124. *???
  125. [email protected]?
  126. [email protected]?
  127. */??
  128. public?static?void?savePNG_After(Bitmap?bitmap,?String?name)?{ ??
  129. File?file?=?new?File(name); ??
  130. try?{ ??
  131. FileOutputStream?out?=?new?FileOutputStream(file); ??
  132. if?(bitmap.compress(Bitmap.CompressFormat.PNG,?100,?out))?{ ??
  133. out.flush(); ??
  134. out.close(); ??
  135. } ??
  136. }?catch?(FileNotFoundException?e)?{ ??
  137. e.printStackTrace(); ??
  138. }?catch?(IOException?e)?{ ??
  139. e.printStackTrace(); ??
  140. } ??
  141. } ??
  142. /**??
  143. *?保存图片为JPEG??
  144. *???
  145. [email protected]?
  146. [email protected]?
  147. */??
  148. public?static?void?saveJPGE_After(Bitmap?bitmap,?String?path)?{ ??
  149. File?file?=?new?File(path); ??
  150. try?{ ??
  151. FileOutputStream?out?=?new?FileOutputStream(file); ??
  152. if?(bitmap.compress(Bitmap.CompressFormat.JPEG,?100,?out))?{ ??
  153. out.flush(); ??
  154. out.close(); ??
  155. } ??
  156. }?catch?(FileNotFoundException?e)?{ ??
  157. e.printStackTrace(); ??
  158. }?catch?(IOException?e)?{ ??
  159. e.printStackTrace(); ??
  160. } ??
  161. } ??
  162. /**??
  163. *?水印??
  164. *???
  165. [email protected]?
  166. [email protected]?
  167. */??
  168. public?static?Bitmap?createBitmapForWatermark(Bitmap?src,?Bitmap?watermark)?{ ??
  169. if?(src?==?null)?{ ??
  170. return?null; ??
  171. } ??
  172. int?w?=?src.getWidth(); ??
  173. int?h?=?src.getHeight(); ??
  174. int?ww?=?watermark.getWidth(); ??
  175. int?wh?=?watermark.getHeight(); ??
  176. //?create?the?new?blank?bitmap???
  177. Bitmap?newb?=?Bitmap.createBitmap(w,?h,?Config.ARGB_8888);//?创建一个新的和SRC长度宽度一样的位图???
  178. Canvas?cv?=?new?Canvas(newb); ??
  179. //?draw?src?into???
  180. cv.drawBitmap(src,?0,?0,?null);//?在?0,0坐标开始画入src???
  181. //?draw?watermark?into???
  182. cv.drawBitmap(watermark,?w?-?ww?+?5,?h?-?wh?+?5,?null);//?在src的右下角画入水印???
  183. //?save?all?clip???
  184. cv.save(Canvas.ALL_SAVE_FLAG);//?保存???
  185. //?store???
  186. cv.restore();//?存储???
  187. return?newb; ??
  188. } ??
  189. /**??
  190. *?图片合成??
  191. *???
  192. [email protected]?
  193. */??
  194. public?static?Bitmap?potoMix(int?direction,?Bitmap...?bitmaps)?{ ??
  195. if?(bitmaps.length?<=?0)?{ ??
  196. return?null; ??
  197. } ??
  198. if?(bitmaps.length?==?1)?{ ??
  199. return?bitmaps[0]; ??
  200. } ??
  201. Bitmap?newBitmap?=?bitmaps[0]; ??
  202. //?newBitmap?=?createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);???
  203. for?(int?i?=?1;?i?<?bitmaps.length;?i++)?{ ??
  204. newBitmap?=?createBitmapForFotoMix(newBitmap,?bitmaps[i],?direction); ??
  205. } ??
  206. return?newBitmap; ??
  207. } ??
  208. ??
  209. private?static?Bitmap?createBitmapForFotoMix(Bitmap?first,?Bitmap?second,?int?direction)?{ ??
  210. if?(first?==?null)?{ ??
  211. return?null; ??
  212. } ??
  213. if?(second?==?null)?{ ??
  214. return?first; ??
  215. }? ??
  216. int?fw?=?first.getWidth(); ??
  217. int?fh?=?first.getHeight(); ??
  218. int?sw?=?second.getWidth(); ??
  219. int?sh?=?second.getHeight(); ??
  220. Bitmap?newBitmap?=?null; ??
  221. if?(direction?==?LEFT)?{ ??
  222. newBitmap?=?Bitmap.createBitmap(fw?+?sw,?fh?>?sh???fh?:?sh,?Config.ARGB_8888); ??
  223. Canvas?canvas?=?new?Canvas(newBitmap); ??
  224. canvas.drawBitmap(first,?sw,?0,?null); ??
  225. canvas.drawBitmap(second,?0,?0,?null); ??
  226. }?else?if?(direction?==?RIGHT)?{ ??
  227. newBitmap?=?Bitmap.createBitmap(fw?+?sw,?fh?>?sh???fh?:?sh,?Config.ARGB_8888); ??
  228. Canvas?canvas?=?new?Canvas(newBitmap); ??
  229. canvas.drawBitmap(first,?0,?0,?null); ??
  230. canvas.drawBitmap(second,?fw,?0,?null); ??
  231. }?else?if?(direction?==?TOP)?{ ??
  232. newBitmap?=?Bitmap.createBitmap(sw?>?fw???sw?:?fw,?fh?+?sh,?Config.ARGB_8888); ??
  233. Canvas?canvas?=?new?Canvas(newBitmap); ??
  234. canvas.drawBitmap(first,?0,?sh,?null); ??
  235. canvas.drawBitmap(second,?0,?0,?null); ??
  236. }?else?if?(direction?==?BOTTOM)?{ ??
  237. newBitmap?=?Bitmap.createBitmap(sw?>?fw???sw?:?fw,?fh?+?sh,?Config.ARGB_8888); ??
  238. Canvas?canvas?=?new?Canvas(newBitmap); ??
  239. canvas.drawBitmap(first,?0,?0,?null); ??
  240. canvas.drawBitmap(second,?0,?fh,?null); ??
  241. } ??
  242. return?newBitmap; ??
  243. } ??
  244. /**??
  245. *?将Bitmap转换成指定大小??
  246. [email protected]?
  247. [email protected]?
  248. [email protected]?
  249. [email protected]?
  250. */??
  251. public?static?Bitmap?createBitmapBySize(Bitmap?bitmap,int?width,int?height) ??
  252. { ??
  253. return?Bitmap.createScaledBitmap(bitmap,?width,?height,?true); ??
  254. } ??
  255. /**??
  256. *?Drawable?转?Bitmap??
  257. *???
  258. [email protected]?
  259. [email protected]?
  260. */??
  261. public?static?Bitmap?drawableToBitmapByBD(Drawable?drawable)?{ ??
  262. BitmapDrawable?bitmapDrawable?=?(BitmapDrawable)drawable; ??
  263. return?bitmapDrawable.getBitmap(); ??
  264. } ??
  265. /**??
  266. *?Bitmap?转?Drawable??
  267. *???
  268. [email protected]?
  269. [email protected]?
  270. */??
  271. public?static?Drawable?bitmapToDrawableByBD(Bitmap?bitmap)?{ ??
  272. Drawable?drawable?=?new?BitmapDrawable(bitmap); ??
  273. return?drawable; ??
  274. } ??
  275. /**??
  276. *?byte[]?转?bitmap??
  277. *???
  278. [email protected]?
  279. [email protected]?
  280. */??
  281. public?static?Bitmap?bytesToBimap(byte[]?b)?{ ??
  282. if?(b.length?!=?0)?{ ??
  283. return?BitmapFactory.decodeByteArray(b,?0,?b.length); ??
  284. }?else?{ ??
  285. return?null; ??
  286. } ??
  287. } ??
  288. /**??
  289. *?bitmap?转?byte[]??
  290. *???
  291. [email protected]?
  292. [email protected]?
  293. */??
  294. public?static?byte[]?bitmapToBytes(Bitmap?bm)?{ ??
  295. ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream(); ??
  296. bm.compress(Bitmap.CompressFormat.PNG,?100,?baos); ??
  297. return?baos.toByteArray(); ??
  298. } ??
  299. } ?

?

  相关解决方案