這篇文章主要介紹了利用java如何實(shí)現(xiàn)一個(gè)圖片縮放效果,創(chuàng)新互聯(lián)小編覺得不錯(cuò),現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨創(chuàng)新互聯(lián)小編來看看吧!
站在用戶的角度思考問題,與客戶深入溝通,找到霍林郭勒網(wǎng)站設(shè)計(jì)與霍林郭勒網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋霍林郭勒地區(qū)。
Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。
package deal; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 圖像處理類. * * @author nagsh * */ public class ImageDeal { String openUrl; // 原始圖片打開路徑 String saveUrl; // 新圖保存路徑 String saveName; // 新圖名稱 String suffix; // 新圖類型 只支持gif,jpg,png public ImageDeal(String openUrl, String saveUrl, String saveName, String suffix) { this.openUrl = openUrl; this.saveName = saveName; this.saveUrl = saveUrl; this.suffix = suffix; } /** * 圖片縮放. * * @param width * 需要的寬度 * @param height * 需要的高度 * @throws Exception */ public void zoom(int width, int height) throws Exception { double sx = 0.0; double sy = 0.0; File file = new File(openUrl); if (!file.isFile()) { throw new Exception("ImageDeal>>>" + file + " 不是一個(gè)圖片文件!"); } BufferedImage bi = ImageIO.read(file); // 讀取該圖片 // 計(jì)算x軸y軸縮放比例--如需等比例縮放,在調(diào)用之前確保參數(shù)width和height是等比例變化的 sx = (double) width / bi.getWidth(); sy = (double) height / bi.getHeight(); AffineTransformOp op = new AffineTransformOp( AffineTransform.getScaleInstance(sx, sy), null); File sf = new File(saveUrl, saveName + "." + suffix); Image zoomImage = op.filter(bi, null); try { ImageIO.write((BufferedImage) zoomImage, suffix, sf); // 保存圖片 } catch (Exception e) { e.printStackTrace(); } } /** * 旋轉(zhuǎn) * * @param degree * 旋轉(zhuǎn)角度 * @throws Exception */ public void spin(int degree) throws Exception { int swidth = 0; // 旋轉(zhuǎn)后的寬度 int sheight = 0; // 旋轉(zhuǎn)后的高度 int x; // 原點(diǎn)橫坐標(biāo) int y; // 原點(diǎn)縱坐標(biāo) File file = new File(openUrl); if (!file.isFile()) { throw new Exception("ImageDeal>>>" + file + " 不是一個(gè)圖片文件!"); } BufferedImage bi = ImageIO.read(file); // 讀取該圖片 // 處理角度--確定旋轉(zhuǎn)弧度 degree = degree % 360; if (degree < 0) degree = 360 + degree;// 將角度轉(zhuǎn)換到0-360度之間 double theta = Math.toRadians(degree);// 將角度轉(zhuǎn)為弧度 // 確定旋轉(zhuǎn)后的寬和高 if (degree == 180 || degree == 0 || degree == 360) { swidth = bi.getWidth(); sheight = bi.getHeight(); } else if (degree == 90 || degree == 270) { sheight = bi.getWidth(); swidth = bi.getHeight(); } else { swidth = (int) (Math.sqrt(bi.getWidth() * bi.getWidth() + bi.getHeight() * bi.getHeight())); sheight = (int) (Math.sqrt(bi.getWidth() * bi.getWidth() + bi.getHeight() * bi.getHeight())); } x = (swidth / 2) - (bi.getWidth() / 2);// 確定原點(diǎn)坐標(biāo) y = (sheight / 2) - (bi.getHeight() / 2); BufferedImage spinImage = new BufferedImage(swidth, sheight, bi.getType()); // 設(shè)置圖片背景顏色 Graphics2D gs = (Graphics2D) spinImage.getGraphics(); gs.setColor(Color.white); gs.fillRect(0, 0, swidth, sheight);// 以給定顏色繪制旋轉(zhuǎn)后圖片的背景 AffineTransform at = new AffineTransform(); at.rotate(theta, swidth / 2, sheight / 2);// 旋轉(zhuǎn)圖象 at.translate(x, y); AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC); spinImage = op.filter(bi, spinImage); File sf = new File(saveUrl, saveName + "." + suffix); ImageIO.write(spinImage, suffix, sf); // 保存圖片 } /** * 馬賽克化. * @param size 馬賽克尺寸,即每個(gè)矩形的長寬 * @return * @throws Exception */ public boolean mosaic(int size) throws Exception { File file = new File(openUrl); if (!file.isFile()) { throw new Exception("ImageDeal>>>" + file + " 不是一個(gè)圖片文件!"); } BufferedImage bi = ImageIO.read(file); // 讀取該圖片 BufferedImage spinImage = new BufferedImage(bi.getWidth(), bi.getHeight(), bi.TYPE_INT_RGB); if (bi.getWidth() < size || bi.getHeight() < size || size <= 0) { // 馬賽克格尺寸太大或太小 return false; } int xcount = 0; // 方向繪制個(gè)數(shù) int ycount = 0; // y方向繪制個(gè)數(shù) if (bi.getWidth() % size == 0) { xcount = bi.getWidth() / size; } else { xcount = bi.getWidth() / size + 1; } if (bi.getHeight() % size == 0) { ycount = bi.getHeight() / size; } else { ycount = bi.getHeight() / size + 1; } int x = 0; //坐標(biāo) int y = 0; // 繪制馬賽克(繪制矩形并填充顏色) Graphics gs = spinImage.getGraphics(); for (int i = 0; i < xcount; i++) { for (int j = 0; j < ycount; j++) { //馬賽克矩形格大小 int mwidth = size; int mheight = size; if(i==xcount-1){ //橫向最后一個(gè)比較特殊,可能不夠一個(gè)size mwidth = bi.getWidth()-x; } if(j == ycount-1){ //同理 mheight =bi.getHeight()-y; } // 矩形顏色取中心像素點(diǎn)RGB值 int centerX = x; int centerY = y; if (mwidth % 2 == 0) { centerX += mwidth / 2; } else { centerX += (mwidth - 1) / 2; } if (mheight % 2 == 0) { centerY += mheight / 2; } else { centerY += (mheight - 1) / 2; } Color color = new Color(bi.getRGB(centerX, centerY)); gs.setColor(color); gs.fillRect(x, y, mwidth, mheight); y = y + size;// 計(jì)算下一個(gè)矩形的y坐標(biāo) } y = 0;// 還原y坐標(biāo) x = x + size;// 計(jì)算x坐標(biāo) } gs.dispose(); File sf = new File(saveUrl, saveName + "." + suffix); ImageIO.write(spinImage, suffix, sf); // 保存圖片 return true; } public static void main(String[] args) throws Exception { ImageDeal imageDeal = new ImageDeal("e://1.jpg", "e://", "2", "jpg"); // 測試縮放 /* imageDeal.zoom(200, 300); */ // 測試旋轉(zhuǎn) /* imageDeal.spin(90); */ //測試馬賽克 /*imageDeal.mosaic(4);*/ } }
以上就是創(chuàng)新互聯(lián)小編為大家收集整理的利用java如何實(shí)現(xiàn)一個(gè)圖片縮放效果,如何覺得創(chuàng)新互聯(lián)網(wǎng)站的內(nèi)容還不錯(cuò),歡迎將創(chuàng)新互聯(lián)網(wǎng)站推薦給身邊好友。
網(wǎng)頁名稱:利用java如何實(shí)現(xiàn)一個(gè)圖片縮放效果
鏈接地址:http://bm7419.com/article20/jddjjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、小程序開發(fā)、Google、網(wǎng)站建設(shè)、搜索引擎優(yōu)化、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)