「java图片截取」java截取网页图片

博主:adminadmin 2022-11-26 14:52:07 63

今天给各位分享java图片截取的知识,其中也会对java截取网页图片进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java怎么剪裁图片

BufferedImage类有一个getSubimage()方法,以下来自API

public BufferedImage getSubimage(int x,

int y,

int w,

int h)

返回由指定矩形区域定义的子图像。返回的 BufferedImage 与源图像共享相同的数据数组。

参数:

x - 指定矩形区域左上角的 X 坐标

y - 指定矩形区域左上角的 Y 坐标

w - 指定矩形区域的宽度

h - 指定矩形区域的高度

返回:

BufferedImage,它是此 BufferedImage 的子图像。

抛出:

RasterFormatException - 如果指定区域不包含在此 BufferedImage 中。

java截取图片

呵呵,很明确的告诉你:可以!

代码半小时后出来!!!

……

终于出来了(呵呵,好像超过了半小时哈)且看代码:

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("给出的参数超出原图片的范围!程序会自动减小宽度或高度");

cw=pw-x;

}

if(phy+height){

System.out.println("给出的参数超出原图片的范围!程序会自动减小宽度或高度");

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报春到你的电脑上了。下面程序的运行效果吧!

java中如何用鼠标点击截取一张图片的某部分(希望有具体代码)

DivImageByMouse是个JPanel子类,把main去掉,add到别的容器下也可以正常使用,是按照鼠标移动取的,要按200*200的取要稍微改动一下

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.Transferable;

import java.awt.datatransfer.UnsupportedFlavorException;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class DivImageByMouse extends JPanel{

BufferedImage image=null;

int x1,y1,x2,y2;

public DivImageByMouse(File file){

super();

this.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e) {

x1=e.getX();

y1=e.getY();

}

public void mouseReleased(MouseEvent e) {

x2=e.getX();

y2=e.getY();

int x=x1x2?x1:x2;

int y=y1y2?y1:y2;

int w=(x1x2?x1:x2)-x;

int h=(y1y2?y1:y2)-y;

Image image=DivImageByMouse.this.getImageByClip(x, y, w, h);

setClipboardImage2(image);

x1=y1=x2=y2=0;

JOptionPane.showMessageDialog(DivImageByMouse.this,"图片已保存到系统粘贴板!","图片已保存",JOptionPane.INFORMATION_MESSAGE);

DivImageByMouse.this.repaint();

}

});

this.addMouseMotionListener(new MouseMotionAdapter(){

public void mouseDragged(MouseEvent e) {

x2=e.getX();

y2=e.getY();

DivImageByMouse.this.repaint();

}

});

try {

image=ImageIO.read(file);

} catch (IOException e) {

System.out.println("输入文件不是一个图片文件!");

}

}

public Image getImage(){

return image;

}

public Image getImageByClip(int x,int y,int w,int h){

int rgbs[]=new int[w*h];

rgbs=image.getRGB(x,y, w, h, rgbs,0,w);

BufferedImage tmpImage=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);

tmpImage.setRGB(0, 0, w, h, rgbs,0,w);

return tmpImage;

}

public void paint(Graphics g){

super.paint(g);

g.drawImage(image,0,0,this);

System.out.println("("+x1+","+y1+")("+x2+","+y2+")");

if(x1==0y1==0x2==0y2==0) return;

System.out.println("rect");

int x=x1x2?x1:x2;

int y=y1y2?y1:y2;

int w=(x1x2?x1:x2)-x;

int h=(y1y2?y1:y2)-y;

g.setColor(Color.blue);

g.drawRect(x, y, w, h);

}

protected static void setClipboardImage2(final Image image) {

Transferable trans = new Transferable(){

public DataFlavor[] getTransferDataFlavors() {

return new DataFlavor[] { DataFlavor.imageFlavor };

}

public boolean isDataFlavorSupported(DataFlavor flavor) {

return DataFlavor.imageFlavor.equals(flavor);

}

public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {

if(isDataFlavorSupported(flavor))

return image;

throw new UnsupportedFlavorException(flavor);

}

};

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);

}

public static void main(String args[]){

JFrame jf=new JFrame("");

jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);

jf.setBounds(50,50,1024,768);

jf.add(new DivImageByMouse(new File("e:\\109.jpg")));

jf.add(new JButton(""),"North");

jf.setVisible(true);

}

}

求一个Java切割图片的函数

package com.supben.util;

import java.awt.Dimension;

import java.awt.Image;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

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;

import org.apache.log4j.Logger;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageUtil {

private static final Logger log = Logger.getLogger(ImageUtil.class);

/**

* 切割图片

* @param x 截点横坐标 (从左开始计数)

* @param y 截点纵坐标 (从上开始计数)

* @param width 截取的宽度

* @param height 截取的长度

* @param oldpath 图片位置

* @param newpath 新生成的图片位置

*/

public static void cutImage(int x, int y, int width, int height, String oldpath, String newpath) {

FileInputStream is = null;

ImageInputStream iis = null;

//这个是获取图片扩展名的方法,比如:jpg。我这里有现成的,如果没有,自己实现

String imgType = StringUtil.getExt(oldpath);

try {

is = new FileInputStream(oldpath);

IteratorImageReader it = ImageIO.getImageReadersByFormatName(imgType);

ImageReader reader = it.next();

iis = ImageIO.createImageInputStream(is);

reader.setInput(iis, true);

ImageReadParam param = reader.getDefaultReadParam();

Point p = new Point();

p.setLocation(x, y);

Dimension d = new Dimension();

d.setSize(width, height);

Rectangle rect = new Rectangle(p, d);

param.setSourceRegion(rect);

BufferedImage bi = reader.read(0, param);

ImageIO.write(bi, imgType, new File(newpath));

is.close();

iis.close();

} catch (Exception e) {

log.error(e);

}

}

/**

* 缩略图片

* @param oldpath 原图片

* @param newpath 新生成的图片存放地址

* @param wdith 缩略后的宽

* @param height 缩略后的高

*/

public static void scaleImage(String oldpath, String newpath, int wdith, int height) {

// 获取老的图片

File oldimg = new File(oldpath);

try {

BufferedImage bi = ImageIO.read(oldimg);

Image Itemp = bi.getScaledInstance(wdith, height, BufferedImage.SCALE_SMOOTH);

BufferedImage thumbnail = new BufferedImage(wdith, height, BufferedImage.TYPE_INT_RGB);

thumbnail.getGraphics().drawImage(Itemp, 0, 0, null);

// 缩略后的图片路径

File newimg = new File(newpath);

FileOutputStream out = new FileOutputStream(newimg);

// 绘图

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbnail);

param.setQuality(1.0f, false);

encoder.encode(thumbnail);

out.close();

bi.flush();

bi = null;

} catch (IOException e) {

log.error(e);

}

}

public static void main(String[] args) {

scaleImage("D:/2.jpg", "D:/3.jpg", 50, 50);

}

}

关于java图片截取和java截取网页图片的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。