展会信息港展会大全

Android中图片放大缩小,去色,转换格式,增加水印
来源:互联网   发布日期:2015-10-03 11:20:46   浏览:1947次  

导读:001packagecom.dzh.operateimage;002importandroid.graphics.Bitmap;003importandroid.graphics.Bitmap.Config;004importandroid.graphics.BitmapFactory;005importandroid.graphics.Canvas;006importandroid.gr......

001packagecom.dzh.operateimage;

002importandroid.graphics.Bitmap;

003importandroid.graphics.Bitmap.Config;

004importandroid.graphics.BitmapFactory;

005importandroid.graphics.Canvas;

006importandroid.graphics.ColorMatrix;

007importandroid.graphics.ColorMatrixColorFilter;

008importandroid.graphics.Paint;

009importandroid.graphics.PorterDuff.Mode;

010importandroid.graphics.PorterDuffXfermode;

011importandroid.graphics.Rect;

012importandroid.graphics.RectF;

013importandroid.graphics.drawable.BitmapDrawable;

014importandroid.graphics.drawable.Drawable;

015importjava.io.ByteArrayOutputStream;

016importjava.io.File;

017importjava.io.FileNotFoundException;

018importjava.io.FileOutputStream;

019importjava.io.IOException;

020/**

021* 处理图片的工具类.

022*/

023public classImageTools {

024public static final intLEFT = 0;

025public static final intRIGHT = 1;

026public static final intTOP = 3;

027public static final intBOTTOM = 4;

028/** */

029/**

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

031*

032* @param bmpOriginal 传入的图片

033* @return 去色后的图片

034*/

035public staticBitmap toGrayscale(Bitmap bmpOriginal) {

036intwidth, height;

037height = bmpOriginal.getHeight();

038width = bmpOriginal.getWidth();

039Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

040Canvas c = newCanvas(bmpGrayscale);

041Paint paint = newPaint();

042ColorMatrix cm = newColorMatrix();

043cm.setSaturation(0);

044ColorMatrixColorFilter f = newColorMatrixColorFilter(cm);

045paint.setColorFilter(f);

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

047returnbmpGrayscale;

048}

049/** */

050/**

051* 去色同时加圆角

052*

053* @param bmpOriginal 原图

054* @param pixels 圆角弧度

055* @return 修改后的图片

056*/

057public static Bitmap toGrayscale(Bitmap bmpOriginal, intpixels) {

058returntoRoundCorner(toGrayscale(bmpOriginal), pixels);

059}

060/** */

061/**

062* 把图片变成圆角

063*

064* @param bitmap 需要修改的图片

065* @param pixels 圆角的弧度

066* @return 圆角图片

067*/

068public static Bitmap toRoundCorner(Bitmap bitmap, intpixels) {

069Bitmap output = Bitmap

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

071Canvas canvas = newCanvas(output);

072final intcolor = 0xff424242;

073final Paint paint = newPaint();

074final Rect rect = newRect(0, 0, bitmap.getWidth(), bitmap.getHeight());

075final RectF rectF = newRectF(rect);

076final floatroundPx = pixels;

077paint.setAntiAlias(true);

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

079paint.setColor(color);

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

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

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

083returnoutput;

084}

085/** */

086/**

087* 使圆角功能支持BitampDrawable

088*

089* @param bitmapDrawable

090* @param pixels

091* @return

092*/

093public staticBitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable, intpixels) {

094Bitmap bitmap = bitmapDrawable.getBitmap();

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

096returnbitmapDrawable;

097}

098/**

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

100*

101* @param path

102*/

103public static voidsaveBefore(String path) {

104BitmapFactory.Options options = newBitmapFactory.Options();

105options.inJustDecodeBounds = true;

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

107Bitmap bitmap = 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* @param bitmap

126* @param name

127*/

128public static voidsavePNG_After(Bitmap bitmap, String name) {

129File file = newFile(name);

130try{

131FileOutputStream out = newFileOutputStream(file);

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

133out.flush();

134out.close();

135}

136} catch(FileNotFoundException e) {

137e.printStackTrace();

138} catch(IOException e) {

139e.printStackTrace();

140}

141}

142/**

143* 保存图片为JPEG

144*

145* @param bitmap

146* @param path

147*/

148public static voidsaveJPGE_After(Bitmap bitmap, String path) {

149File file = newFile(path);

150try{

151FileOutputStream out = newFileOutputStream(file);

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

153out.flush();

154out.close();

155}

156} catch(FileNotFoundException e) {

157e.printStackTrace();

158} catch(IOException e) {

159e.printStackTrace();

160}

161}

162/**

163* 水印

164*

165* @param bitmap

166* @return

167*/

168public staticBitmap createBitmapForWatermark(Bitmap src, Bitmap watermark) {

169if(src == null) {

170returnnull;

171}

172intw = src.getWidth();

173inth = src.getHeight();

174intww = watermark.getWidth();

175intwh = watermark.getHeight();

176// create the new blank bitmap

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

178Canvas cv = newCanvas(newb);

179// draw src into

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

181// draw watermark into

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

183// save all clip

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

185// store

186cv.restore();// 存储

187returnnewb;

188}

189/**

190* 图片合成

191*

192* @return

193*/

194public static Bitmap potoMix(intdirection, Bitmap... bitmaps) {

195if(bitmaps.length <= 0) {

196returnnull;

197}

198if(bitmaps.length == 1) {

199returnbitmaps[0];

200}

201Bitmap newBitmap = 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

209private staticBitmap createBitmapForFotoMix(Bitmap first, Bitmap second, intdirection) {

210if(first == null) {

211returnnull;

212}

213if(second == null) {

214returnfirst;

215}

216intfw = first.getWidth();

217intfh = first.getHeight();

218intsw = second.getWidth();

219intsh = second.getHeight();

220Bitmap newBitmap = null;

221if(direction == LEFT) {

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

223Canvas canvas = newCanvas(newBitmap);

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

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

226} else if(direction == RIGHT) {

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

228Canvas canvas = newCanvas(newBitmap);

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

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

231} else if(direction == TOP) {

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

233Canvas canvas = newCanvas(newBitmap);

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

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

236} else if(direction == BOTTOM) {

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

238Canvas canvas = newCanvas(newBitmap);

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

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

241}

242returnnewBitmap;

243}

244/**

245* 将Bitmap转换成指定大小

246* @param bitmap

247* @param width

248* @param height

249* @return

250*/

251public static Bitmap createBitmapBySize(Bitmap bitmap,int width,intheight)

252{

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

254}

255/**

256* Drawable 转 Bitmap

257*

258* @param drawable

259* @return

260*/

261public staticBitmap drawableToBitmapByBD(Drawable drawable) {

262BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;

263returnbitmapDrawable.getBitmap();

264}

265/**

266* Bitmap 转 Drawable

267*

268* @param bitmap

269* @return

270*/

271public staticDrawable bitmapToDrawableByBD(Bitmap bitmap) {

272Drawable drawable = newBitmapDrawable(bitmap);

273returndrawable;

274}

275/**

276* byte[] 转 bitmap

277*

278* @param b

279* @return

280*/

281public staticBitmap bytesToBimap(byte[] b) {

282if(b.length != 0) {

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

284} else{

285returnnull;

286}

287}

288/**

289* bitmap 转 byte[]

290*

291* @param bm

292* @return

293*/

294public staticbyte[] bitmapToBytes(Bitmap bm) {

295ByteArrayOutputStream baos = newByteArrayOutputStream();

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

297returnbaos.toByteArray();

298}

299}

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港