`
844604778
  • 浏览: 551446 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

转载网站:http://www.linuxidc.com/Linux/2011-11/48110.htm###


1packagecom.dzh.operateimage;

2importandroid.graphics.Bitmap;

3importandroid.graphics.Bitmap.Config;

4importandroid.graphics.BitmapFactory;

5importandroid.graphics.Canvas;

6importandroid.graphics.ColorMatrix;

7importandroid.graphics.ColorMatrixColorFilter;

8importandroid.graphics.Paint;

9importandroid.graphics.PorterDuff.Mode;

10importandroid.graphics.PorterDuffXfermode;

11importandroid.graphics.Rect;

12importandroid.graphics.RectF;

13importandroid.graphics.drawable.BitmapDrawable;

14importandroid.graphics.drawable.Drawable;

15importjava.io.ByteArrayOutputStream;

16importjava.io.File;

17importjava.io.FileNotFoundException;

18importjava.io.FileOutputStream;

19importjava.io.IOException;

20/**

21*处理图片的工具类.

22*/

23publicclassImageTools{

24publicstaticfinalintLEFT=0;

25publicstaticfinalintRIGHT=1;

26publicstaticfinalintTOP=3;

27publicstaticfinalintBOTTOM=4;

28/***/

29/**

30*图片去色,返回灰度图片

31*

32*@parambmpOriginal传入的图片

33*@return去色后的图片

34*/

35publicstaticBitmaptoGrayscale(BitmapbmpOriginal){

36intwidth,height;

37height=bmpOriginal.getHeight();

38width=bmpOriginal.getWidth();

39BitmapbmpGrayscale=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);

40Canvasc=newCanvas(bmpGrayscale);

41Paintpaint=newPaint();

42ColorMatrixcm=newColorMatrix();

43cm.setSaturation(0);

44ColorMatrixColorFilterf=newColorMatrixColorFilter(cm);

45paint.setColorFilter(f);

46c.drawBitmap(bmpOriginal,0,0,paint);

47returnbmpGrayscale;

48}

49/***/

50/**

51*去色同时加圆角

52*

53*@parambmpOriginal原图

54*@parampixels圆角弧度

55*@return修改后的图片

56*/

57publicstaticBitmaptoGrayscale(BitmapbmpOriginal,intpixels){

58returntoRoundCorner(toGrayscale(bmpOriginal),pixels);

59}

60/***/

61/**

62*把图片变成圆角

63*

64*@parambitmap需要修改的图片

65*@parampixels圆角的弧度

66*@return圆角图片

67*/

68publicstaticBitmaptoRoundCorner(Bitmapbitmap,intpixels){

69Bitmapoutput=Bitmap

70.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);

71Canvascanvas=newCanvas(output);

72finalintcolor=0xff424242;

73finalPaintpaint=newPaint();

74finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());

75finalRectFrectF=newRectF(rect);

76finalfloatroundPx=pixels;

77paint.setAntiAlias(true);

78canvas.drawARGB(0,0,0,0);

79paint.setColor(color);

80canvas.drawRoundRect(rectF,roundPx,roundPx,paint);

81paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));

82canvas.drawBitmap(bitmap,rect,rect,paint);

83returnoutput;

84}

85/***/

86/**

87*使圆角功能支持BitampDrawable

88*

89*@parambitmapDrawable

90*@parampixels

91*@return

92*/

93publicstaticBitmapDrawabletoRoundCorner(BitmapDrawablebitmapDrawable,intpixels){

94Bitmapbitmap=bitmapDrawable.getBitmap();

95bitmapDrawable=newBitmapDrawable(toRoundCorner(bitmap,pixels));

96returnbitmapDrawable;

97}

98/**

99*读取路径中的图片,然后将其转化为缩放后的bitmap

100*

101*@parampath

102*/

103publicstaticvoidsaveBefore(Stringpath){

104BitmapFactory.Optionsoptions=newBitmapFactory.Options();

105options.inJustDecodeBounds=true;

106//获取这个图片的宽和高

107Bitmapbitmap=BitmapFactory.decodeFile(path,options);//此时返回bm为空

108options.inJustDecodeBounds=false;

109//计算缩放比

110intbe=(int)(options.outHeight/(float)200);

111if(be<=0)

112be=1;

113options.inSampleSize=2;//图片长宽各缩小二分之一

114//重新读入图片,注意这次要把options.inJustDecodeBounds设为false

115bitmap=BitmapFactory.decodeFile(path,options);

116intw=bitmap.getWidth();

117inth=bitmap.getHeight();

118System.out.println(w+""+h);

119//savePNG_After(bitmap,path);

120saveJPGE_After(bitmap,path);

121}

122/**

123*保存图片为PNG

124*

125*@parambitmap

126*@paramname

127*/

128publicstaticvoidsavePNG_After(Bitmapbitmap,Stringname){

129Filefile=newFile(name);

130try{

131FileOutputStreamout=newFileOutputStream(file);

132if(bitmap.compress(Bitmap.CompressFormat.PNG,100,out)){

133out.flush();

134out.close();

135}

136}catch(FileNotFoundExceptione){

137e.printStackTrace();

138}catch(IOExceptione){

139e.printStackTrace();

140}

141}

142/**

143*保存图片为JPEG

144*

145*@parambitmap

146*@parampath

147*/

148publicstaticvoidsaveJPGE_After(Bitmapbitmap,Stringpath){

149Filefile=newFile(path);

150try{

151FileOutputStreamout=newFileOutputStream(file);

152if(bitmap.compress(Bitmap.CompressFormat.JPEG,100,out)){

153out.flush();

154out.close();

155}

156}catch(FileNotFoundExceptione){

157e.printStackTrace();

158}catch(IOExceptione){

159e.printStackTrace();

160}

161}

162/**

163*水印

164*

165*@parambitmap

166*@return

167*/

168publicstaticBitmapcreateBitmapForWatermark(Bitmapsrc,Bitmapwatermark){

169if(src==null){

170returnnull;

171}

172intw=src.getWidth();

173inth=src.getHeight();

174intww=watermark.getWidth();

175intwh=watermark.getHeight();

176//createthenewblankbitmap

177Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图

178Canvascv=newCanvas(newb);

179//drawsrcinto

180cv.drawBitmap(src,0,0,null);//00坐标开始画入src

181//drawwatermarkinto

182cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//src的右下角画入水印

183//saveallclip

184cv.save(Canvas.ALL_SAVE_FLAG);//保存

185//store

186cv.restore();//存储

187returnnewb;

188}

189/**

190*图片合成

191*

192*@return

193*/

194publicstaticBitmappotoMix(intdirection,Bitmap...bitmaps){

195if(bitmaps.length<=0){

196returnnull;

197}

198if(bitmaps.length==1){

199returnbitmaps[0];

200}

201BitmapnewBitmap=bitmaps[0];

202//newBitmap=createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);

203for(inti=1;i<bitmaps.length;i++){

204newBitmap=createBitmapForFotoMix(newBitmap,bitmaps[i],direction);

205}

206returnnewBitmap;

207}

208

209privatestaticBitmapcreateBitmapForFotoMix(Bitmapfirst,Bitmapsecond,intdirection){

210if(first==null){

211returnnull;

212}

213if(second==null){

214returnfirst;

215}

216intfw=first.getWidth();

217intfh=first.getHeight();

218intsw=second.getWidth();

219intsh=second.getHeight();

220BitmapnewBitmap=null;

221if(direction==LEFT){

222newBitmap=Bitmap.createBitmap(fw+sw,fh>sh?fh:sh,Config.ARGB_8888);

223Canvascanvas=newCanvas(newBitmap);

224canvas.drawBitmap(first,sw,0,null);

225canvas.drawBitmap(second,0,0,null);

226}elseif(direction==RIGHT){

227newBitmap=Bitmap.createBitmap(fw+sw,fh>sh?fh:sh,Config.ARGB_8888);

228Canvascanvas=newCanvas(newBitmap);

229canvas.drawBitmap(first,0,0,null);

230canvas.drawBitmap(second,fw,0,null);

231}elseif(direction==TOP){

232newBitmap=Bitmap.createBitmap(sw>fw?sw:fw,fh+sh,Config.ARGB_8888);

233Canvascanvas=newCanvas(newBitmap);

234canvas.drawBitmap(first,0,sh,null);

235canvas.drawBitmap(second,0,0,null);

236}elseif(direction==BOTTOM){

237newBitmap=Bitmap.createBitmap(sw>fw?sw:fw,fh+sh,Config.ARGB_8888);

238Canvascanvas=newCanvas(newBitmap);

239canvas.drawBitmap(first,0,0,null);

240canvas.drawBitmap(second,0,fh,null);

241}

242returnnewBitmap;

243}

244/**

245*Bitmap转换成指定大小

246*@parambitmap

247*@paramwidth

248*@paramheight

249*@return

250*/

251publicstaticBitmapcreateBitmapBySize(Bitmapbitmap,intwidth,intheight)

252{

253returnBitmap.createScaledBitmap(bitmap,width,height,true);

254}

255/**

256*DrawableBitmap

257*

258*@paramdrawable

259*@return

260*/

261publicstaticBitmapdrawableToBitmapByBD(Drawabledrawable){

262BitmapDrawablebitmapDrawable=(BitmapDrawable)drawable;

263returnbitmapDrawable.getBitmap();

264}

265/**

266*BitmapDrawable

267*

268*@parambitmap

269*@return

270*/

271publicstaticDrawablebitmapToDrawableByBD(Bitmapbitmap){

272Drawabledrawable=newBitmapDrawable(bitmap);

273returndrawable;

274}

275/**

276*byte[]bitmap

277*

278*@paramb

279*@return

280*/

281publicstaticBitmapbytesToBimap(byte[]b){

282if(b.length!=0){

283returnBitmapFactory.decodeByteArray(b,0,b.length);

284}else{

285returnnull;

286}

287}

288/**

289*bitmapbyte[]

290*

291*@parambm

292*@return

293*/

294publicstaticbyte[]bitmapToBytes(Bitmapbm){

295ByteArrayOutputStreambaos=newByteArrayOutputStream();

296bm.compress(Bitmap.CompressFormat.PNG,100,baos);

297returnbaos.toByteArray();

298}

299}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics