欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java代碼裁剪圖片 java圖片裁剪工具

如何在Java中進(jìn)行圖片剪裁 瘋狂JAVA

package?test;

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、信州ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的信州網(wǎng)站制作公司

import?java.awt.Color;

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?java.io.IOException;

import?java.nio.Buffer;

import?javax.imageio.ImageIO;

import?javax.imageio.stream.ImageOutputStream;

/**

*?裁剪、縮放圖片工具類

*?

*?@author?CSDN?沒有夢想-何必遠(yuǎn)方

*/

public?class?ImgUtils?{

/**

?*?縮放圖片方法

?*?

?*?@param?srcImageFile

?*????????????要縮放的圖片路徑

?*?@param?result

?*????????????縮放后的圖片路徑

?*?@param?height

?*????????????目標(biāo)高度像素

?*?@param?width

?*????????????目標(biāo)寬度像素

?*?@param?bb

?*????????????是否補(bǔ)白

?*/

public?final?static?void?scale(String?srcImageFile,?String?result,

int?height,?int?width,?boolean?bb)?{

try?{

double?ratio?=?0.0;?//?縮放比例

File?f?=?new?File(srcImageFile);

BufferedImage?bi?=?ImageIO.read(f);

Image?itemp?=?bi.getScaledInstance(width,?height,?bi.SCALE_SMOOTH);//?bi.SCALE_SMOOTH

//?選擇圖像平滑度比縮放速度具有更高優(yōu)先級(jí)的圖像縮放算法。

//?計(jì)算比例

if?((bi.getHeight()??height)?||?(bi.getWidth()??width))?{

double?ratioHeight?=?(new?Integer(height)).doubleValue()

/?bi.getHeight();

double?ratioWhidth?=?(new?Integer(width)).doubleValue()

/?bi.getWidth();

if?(ratioHeight??ratioWhidth)?{

ratio?=?ratioHeight;

}?else?{

ratio?=?ratioWhidth;

}

AffineTransformOp?op?=?new?AffineTransformOp(AffineTransform//?仿射轉(zhuǎn)換

.getScaleInstance(ratio,?ratio),?null);//?返回表示剪切變換的變換

itemp?=?op.filter(bi,?null);//?轉(zhuǎn)換源?BufferedImage?并將結(jié)果存儲(chǔ)在目標(biāo)

//?BufferedImage?中。

}

if?(bb)?{//?補(bǔ)白

BufferedImage?image?=?new?BufferedImage(width,?height,

BufferedImage.TYPE_INT_RGB);//?構(gòu)造一個(gè)類型為預(yù)定義圖像類型之一的

//?BufferedImage。

Graphics2D?g?=?image.createGraphics();//?創(chuàng)建一個(gè)

//?Graphics2D,可以將它繪制到此

//?BufferedImage?中。

g.setColor(Color.white);//?控制顏色

g.fillRect(0,?0,?width,?height);//?使用?Graphics2D?上下文的設(shè)置,填充?Shape

//?的內(nèi)部區(qū)域。

if?(width?==?itemp.getWidth(null))

g.drawImage(itemp,?0,?(height?-?itemp.getHeight(null))?/?2,

itemp.getWidth(null),?itemp.getHeight(null),

Color.white,?null);

else

g.drawImage(itemp,?(width?-?itemp.getWidth(null))?/?2,?0,

itemp.getWidth(null),?itemp.getHeight(null),

Color.white,?null);

g.dispose();

itemp?=?image;

}

ImageIO.write((BufferedImage)?itemp,?"JPEG",?new?File(result));?//?輸出壓縮圖片

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

/**

?*?裁剪圖片方法

?*?

?*?@param?bufferedImage

?*????????????圖像源

?*?@param?startX

?*????????????裁剪開始x坐標(biāo)

?*?@param?startY

?*????????????裁剪開始y坐標(biāo)

?*?@param?endX

?*????????????裁剪結(jié)束x坐標(biāo)

?*?@param?endY

?*????????????裁剪結(jié)束y坐標(biāo)

?*?@return

?*/

public?static?BufferedImage?cropImage(BufferedImage?bufferedImage,

int?startX,?int?startY,?int?endX,?int?endY)?{

int?width?=?bufferedImage.getWidth();

int?height?=?bufferedImage.getHeight();

if?(startX?==?-1)?{

startX?=?0;

}

if?(startY?==?-1)?{

startY?=?0;

}

if?(endX?==?-1)?{

endX?=?width?-?1;

}

if?(endY?==?-1)?{

endY?=?height?-?1;

}

BufferedImage?result?=?new?BufferedImage(endX?-?startX,?endY?-?startY,

4);

for?(int?x?=?startX;?x??endX;?++x)?{

for?(int?y?=?startY;?y??endY;?++y)?{

int?rgb?=?bufferedImage.getRGB(x,?y);

result.setRGB(x?-?startX,?y?-?startY,?rgb);

}

}

return?result;

}

public?static?void?main(String[]?args)?throws?IOException?{

File?input?=?new?File("input.jpg");

BufferedImage?img?=?ImageIO.read(input);

cropImage(img,?10,?10,?20,?20);

File?output?=?new?File("output.jpg");

ImageIO.write(img,?"jpg",?output);

}

}

java怎么剪裁圖片

BufferedImage類有一個(gè)getSubimage()方法,以下來自API

public BufferedImage getSubimage(int x,

int y,

int w,

int h)

返回由指定矩形區(qū)域定義的子圖像。返回的 BufferedImage 與源圖像共享相同的數(shù)據(jù)數(shù)組。

參數(shù):

x - 指定矩形區(qū)域左上角的 X 坐標(biāo)

y - 指定矩形區(qū)域左上角的 Y 坐標(biāo)

w - 指定矩形區(qū)域的寬度

h - 指定矩形區(qū)域的高度

返回:

BufferedImage,它是此 BufferedImage 的子圖像。

拋出:

RasterFormatException - 如果指定區(qū)域不包含在此 BufferedImage 中。

java圖片裁剪原理

總體思想

前臺(tái)網(wǎng)頁用js得到裁剪圖片的id及x y 寬度和高度

服務(wù)端根據(jù)id取出要裁剪的圖片

根據(jù)這些參數(shù)來生成裁剪的圖像 后臺(tái)代碼如下

java 代碼

package wodexiangce;

import java awt Rectangle;

import java awt image BufferedImage;

import java io File;

import java io FileInputStream;

import java io IOException;

import java util Iterator;

import javax imageio ImageIO;

import javax imageio ImageReadParam;

import javax imageio ImageReader;

import javax imageio stream ImageInputStream;

/**

*

*

*

*/

public class OperateImage {

// ===源圖片路徑名稱如 c:\ jpg

private String srcpath ;

// ===剪切圖片存放路徑名稱 如 c:\ jpg

private String subpath ;

// ===剪切點(diǎn)x坐標(biāo)

private int x ;

private int y ;

// ===剪切點(diǎn)寬度

private int width ;

private int height ;

public OperateImage() {

}

public OperateImage( int x int y int width int height) {

this x = x ;

this y = y ;

this width = width ;

this height = height ;

}

/**

* 對(duì)圖片裁剪 并把裁剪完蛋新圖片保存

*/

public void cut() throws IOException {

FileInputStream is = null ;

ImageInputStream iis = null ;

try {

// 讀取圖片文件

is = new FileInputStream(srcpath)

/*

* 返回包含所有當(dāng)前已注冊(cè) ImageReader 的 Iterator 這些 ImageReader

* 聲稱能夠解碼指定格式 參數(shù) formatName 包含非正式格式名稱

*(例如 jpeg 或 tiff )等

*/

Iterator ImageReader it = ImageIO getImageReadersByFormatName( jpg )

ImageReader reader = it next()

// 獲取圖片流

iis = ImageIO createImageInputStream(is)

/*

* piis:讀取源 true:只向前搜索 /p 將它標(biāo)記為 只向前搜索

* 此設(shè)置意味著包含在輸入源中的圖像將只按順序讀取 可能允許 reader

* 避免緩存包含與以前已經(jīng)讀取的圖像關(guān)聯(lián)的數(shù)據(jù)的那些輸入部分

*/

reader setInput(iis true ) ;

/*

* p描述如何對(duì)流進(jìn)行解碼的類p 用于指定如何在輸入時(shí)從 Java Image I/O

* 框架的上下文中的流轉(zhuǎn)換一幅圖像或一組圖像 用于特定圖像格式的插件

* 將從其 ImageReader 實(shí)現(xiàn)的 getDefaultReadParam 方法中返回

* ImageReadParam 的實(shí)例

*/

ImageReadParam param = reader getDefaultReadParam()

/*

* 圖片裁剪區(qū)域 Rectangle 指定了坐標(biāo)空間中的一個(gè)區(qū)域 通過 Rectangle 對(duì)象

* 的左上頂點(diǎn)的坐標(biāo)(x y) 寬度和高度可以定義這個(gè)區(qū)域

*/

Rectangle rect = new Rectangle(x y width height)

// 提供一個(gè) BufferedImage 將其用作解碼像素?cái)?shù)據(jù)的目標(biāo)

param setSourceRegion(rect)

/*

* 使用所提供的 ImageReadParam 讀取通過索引 imageIndex 指定的對(duì)象 并將

* 它作為一個(gè)完整的 BufferedImage 返回

*/

BufferedImage bi = reader read( param)

// 保存新圖片

ImageIO write(bi jpg new File(subpath))

} finally {

if (is != null )

is close() ;

if (iis != null )

iis close()

}

}

public int getHeight() {

return height;

}

public void setHeight( int height) {

this height = height;

}

public String getSrcpath() {

return srcpath;

}

public void setSrcpath(String srcpath) {

this srcpath = srcpath;

}

public String getSubpath() {

return subpath;

}

public void setSubpath(String subpath) {

this subpath = subpath;

}

public int getWidth() {

return width;

}

public void setWidth( int width) {

this width = width;

}

public int getX() {

return x;

}

public void setX( int x) {

this x = x;

}

public int getY() {

return y;

}

public void setY( int y) {

this y = y;

}

public static void main(String[] args) throws Exception {

String name = d:\ jpg ;

OperateImage o = new OperateImage( )

o setSrcpath(name)

o setSubpath( D:\ jpg )

o cut() ;

}

lishixinzhi/Article/program/Java/hx/201311/26771

java截取圖片

呵呵,很明確的告訴你:可以!

代碼半小時(shí)后出來?。?!

……

終于出來了(呵呵,好像超過了半小時(shí)哈)且看代碼:

import?java.awt.Color;

import?java.awt.Graphics;

import?java.awt.image.BufferedImage;

import?java.io.File;

import?java.io.IOException;

import?javax.imageio.ImageIO;

import?javax.swing.JApplet;

public?class?Test?extends?JApplet{

String?addrs="F:\\images\\mm.bmp";//改成自己的圖片路徑

BufferedImage?mm,child;

CutImage?ci;

public?Test(){

try?{

mm=ImageIO.read(new?File(addrs));

}?catch?(IOException?e)?{

System.out.println("圖片讀取失??!");

e.printStackTrace();

}

ci=new?CutImage(mm);

child=ci.getChildImage(50,?0,?150,?220);

}

public?void?init(){

}

public?void?paint(Graphics?g){

g.setColor(Color.red);

g.drawString("原圖:",0,10);

g.drawImage(mm,?20,10,this);

g.drawString("ci.getChildImage(50,?0,?150,?220)截取后的圖片",mm.getWidth()+30,10);

g.drawImage(child,?mm.getWidth()+50,20,this);

}

}

import?java.awt.Image;

import?java.awt.image.BufferedImage;

public?class?CutImage?{

private?BufferedImage?img;

private?BufferedImage?child;

public?CutImage(){

}

public?CutImage(BufferedImage?im){

img=im;

}

public?CutImage(Image?im){

img=(BufferedImage)im;

}

public?void?setImg(BufferedImage?img)?{

this.img?=?img;

}

public?BufferedImage?getChildImage(int?x,int?y,int?width,int?height)?{

int?cw=width;

int?ch=height;

int?pw=img.getWidth();

int?ph=img.getHeight();

if(pwx+width){

System.out.println("給出的參數(shù)超出原圖片的范圍!程序會(huì)自動(dòng)減小寬度或高度");

cw=pw-x;

}

if(phy+height){

System.out.println("給出的參數(shù)超出原圖片的范圍!程序會(huì)自動(dòng)減小寬度或高度");

ch=ph-y;

}

child=new?BufferedImage(cw,ch,BufferedImage.TYPE_INT_ARGB?);

for(int?i=0;ich;i++){

for(int?j=0;jcw;j++){

child.setRGB(j,?i,?img.getRGB(x+j,?y+i));

}

}

return?child;

}

}

呵呵,希望樓主能夠滿意哦,如果你愿意的話,稍微改一下代碼就可以把截取的圖片child報(bào)春到你的電腦上了。下面程序的運(yùn)行效果吧!

您好!請(qǐng)問用java怎么將截取png的圖片中間一部分,以及如何壓縮一個(gè)png圖片?

getSubimage方法是進(jìn)行圖片裁剪。

舉例:

public static void main(String[] args) {

try {

//從特定文件載入

BufferedImage bi = ImageIO.read(new File("c:\\test.png"));

bi.getSubimage(0, 0, 10, 10);//前兩個(gè)值是坐標(biāo)位置X、Y,后兩個(gè)是長和寬

} catch (IOException e) {

e.printStackTrace();

}

}

以下是進(jìn)行的圖片壓縮,涉及到多個(gè)工具類。

/**

* 圖片工具類

* 壓縮圖片大小

* @author Cyw

* @version 1.0

*/

public class ZIPImage {

private File file = null;

private String outPutFilePath;

private String inPutFilePath;

private String inPutFileName;

private boolean autoBuildFileName;

private String outPutFileName;

private int outPutFileWidth = 100; // 默認(rèn)輸出圖片寬

private int outPutFileHeight = 100; // 默認(rèn)輸出圖片高

private static boolean isScaleZoom = true; // 是否按比例縮放

public ZIPImage() {

outPutFilePath = "";

inPutFilePath = "";

inPutFileName = "";

autoBuildFileName = true;

outPutFileName = "";

}

/**

*?

* @param ipfp

* 源文件夾路徑

* @param ipfn

* 源文件名

* @param opfp

* 目標(biāo)文件路徑

* @param opfn

* 目標(biāo)文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn) {

outPutFilePath = opfp;

inPutFilePath = ipfp;

inPutFileName = ipfn;

autoBuildFileName = true;

outPutFileName = opfn;

}

/**

*?

* @param ipfp

* 源文件夾路徑

* @param ipfn

* 源文件名

* @param opfp

* 目標(biāo)文件路徑

* @param opfn

* 目標(biāo)文件名

* @param aBFN

* 是否自動(dòng)生成目標(biāo)文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn,

boolean aBFN) {

outPutFilePath = opfp;

inPutFilePath = ipfp;

inPutFileName = ipfn;

autoBuildFileName = aBFN;

outPutFileName = opfn;

}

public boolean isAutoBuildFileName() {

return autoBuildFileName;

}

public void setAutoBuildFileName(boolean autoBuildFileName) {

this.autoBuildFileName = autoBuildFileName;

}

public String getInPutFilePath() {

return inPutFilePath;

}

public void setInPutFilePath(String inPutFilePath) {

this.inPutFilePath = inPutFilePath;

}

public String getOutPutFileName() {

return outPutFileName;

}

public void setOutPutFileName(String outPutFileName) {

this.outPutFileName = outPutFileName;

}

public String getOutPutFilePath() {

return outPutFilePath;

}

public void setOutPutFilePath(String outPutFilePath) {

this.outPutFilePath = outPutFilePath;

}

public int getOutPutFileHeight() {

return outPutFileHeight;

}

public void setOutPutFileHeight(int outPutFileHeight) {

this.outPutFileHeight = outPutFileHeight;

}

public int getOutPutFileWidth() {

return outPutFileWidth;

}

public void setOutPutFileWidth(int outPutFileWidth) {

this.outPutFileWidth = outPutFileWidth;

}

public boolean isScaleZoom() {

return isScaleZoom;

}

public void setScaleZoom(boolean isScaleZoom) {

this.isScaleZoom = isScaleZoom;

}

public String getInPutFileName() {

return inPutFileName;

}

public void setInPutFileName(String inPutFileName) {

this.inPutFileName = inPutFileName;

}

/**

* 壓縮圖片大小

*?

* @return boolean

*/

public boolean compressImage() {

boolean flag = false;

try {

if (inPutFilePath.trim().equals("")) {

throw new NullPointerException("源文件夾路徑不存在。");

}

if (inPutFileName.trim().equals("")) {

throw new NullPointerException("圖片文件路徑不存在。");

}

if (outPutFilePath.trim().equals("")) {

throw new NullPointerException("目標(biāo)文件夾路徑地址為空。");

} else {

if (!ZIPImage.mddir(outPutFilePath)) {

throw new FileNotFoundException(outPutFilePath

+ " 文件夾創(chuàng)建失??!");

}

}

if (this.autoBuildFileName) { // 自動(dòng)生成文件名

String tempFile[] = getFileNameAndExtName(inPutFileName);

outPutFileName = tempFile[0] + "_cyw." + tempFile[1];

compressPic();

} else {

if (outPutFileName.trim().equals("")) {

throw new NullPointerException("目標(biāo)文件名為空。");

}

compressPic();

}

} catch (Exception e) {

flag = false;

e.printStackTrace();

return flag;

}

return flag;

}

// 圖片處理

private void compressPic() throws Exception {

try {

// 獲得源文件

file = new File(inPutFilePath + inPutFileName);

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!");

}

Image img = ImageIO.read(file);

// 判斷圖片格式是否正確

if (img.getWidth(null) == -1) {

throw new Exception("文件不可讀!");

} else {

int newWidth;

int newHeight;

// 判斷是否是等比縮放

if (ZIPImage.isScaleZoom == true) {

// 為等比縮放計(jì)算輸出的圖片寬度及高度

double rate1 = ((double) img.getWidth(null))

/ (double) outPutFileWidth + 0.1;

double rate2 = ((double) img.getHeight(null))

/ (double) outPutFileHeight + 0.1;

// 根據(jù)縮放比率大的進(jìn)行縮放控制

double rate = rate1 rate2 ? rate1 : rate2;

newWidth = (int) (((double) img.getWidth(null)) / rate);

newHeight = (int) (((double) img.getHeight(null)) / rate);

} else {

newWidth = outPutFileWidth; // 輸出的圖片寬度

newHeight = outPutFileHeight; // 輸出的圖片高度

}

BufferedImage tag = new BufferedImage((int) newWidth,

(int) newHeight, BufferedImage.TYPE_INT_RGB);

/*

* Image.SCALE_SMOOTH 的縮略算法 生成縮略圖片的平滑度的 優(yōu)先級(jí)比速度高 生成的圖片質(zhì)量比較好 但速度慢

*/

tag.getGraphics().drawImage(

img.getScaledInstance(newWidth, newHeight,

Image.SCALE_SMOOTH), 0, 0, null);

FileOutputStream out = new FileOutputStream(outPutFilePath

+ outPutFileName);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag);

out.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

/**

* 創(chuàng)建文件夾目錄

*?

* @param filePath

* @return

* @throws Exception

*/

@SuppressWarnings("unused")

private static boolean mddir(String filePath) throws Exception {

boolean flag = false;

File f = new File(filePath);

if (!f.exists()) {

flag = f.mkdirs();

} else {

flag = true;

}

return flag;

}

/**

* 獲得文件名和擴(kuò)展名

*?

* @param fullFileName

* @return

* @throws Exception

*/

private String[] getFileNameAndExtName(String fullFileName)

throws Exception {

String[] fileNames = new String[2];

if (fullFileName.indexOf(".") == -1) {

throw new Exception("源文件名不正確!");

} else {

fileNames[0] = fullFileName.substring(0, fullFileName

.lastIndexOf("."));

fileNames[1] = fullFileName

.substring(fullFileName.lastIndexOf(".") + 1);

}

return fileNames;

}

public Image getSourceImage() throws IOException{

//獲得源文件

file = new File(inPutFilePath + inPutFileName);

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!");

}

Image img = ImageIO.read(file);

return img;

}

/*

* 獲得圖片大小?

* @path :圖片路徑

*/

public long getPicSize(String path) {

File file = new File(path);

return file.length();

}

}

//下面是測試程序

package com.sun.util.cyw;

import java.awt.Image;

import java.io.IOException;

public class ImageTest {

public static void main(String[] args) throws IOException {

ZIPImage zip=new ZIPImage("d:\\","1.jpg","d:\\test\\","處理后的圖片.jpg",false);

zip.setOutPutFileWidth(1000);

zip.setOutPutFileHeight(1000);

Image image=zip.getSourceImage();

long size=zip.getPicSize("d:\\1.jpg");

System.out.println("處理前的圖片大小 width:"+image.getWidth(null));

System.out.println("處理前的圖片大小 height:"+image.getHeight(null));

System.out.println("處理前的圖片容量:"+ size +" bit");

zip.compressImage();

}

}

網(wǎng)站標(biāo)題:java代碼裁剪圖片 java圖片裁剪工具
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article6/dodssig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、ChatGPT、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈、用戶體驗(yàn)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營