求一个Java切割图片的函数

求一个Java切割图片的函数,第1张

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)

Iterator<ImageReader>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)

}

}

getSubimage方法是进行图灶誉片裁剪悉轿。

举例:

public static void main(String[] args) {

try {

//从特定文件载睁辩肆入

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

bi.getSubimage(0, 0, 10, 10)//前两个值是坐标位置X、Y,后两个是长和宽

} catch (IOException e) {

e.printStackTrace()

}

}

零基础如何开始学习Java,怎样才能入足编程领域,本文达妹为大家带来进入IT行业有四五年,见了不少新人,面试了不少新人,也带了一些新人的老司机给的建议。

一、关于书籍

新人们常常会说我看了多少多少的书,看过某某人写的书,仿佛书看的多懂得也就多了。其实不然,很多新人在面试的时候夸夸其谈,说啥啥都知道一点,到真正做的时候,啥都不会。

归根到底是没有经验,技术这玩意儿经验非常重要,很多东西如果不是你碰到了,看那么多书也找不到答案。

我看书的习惯一般都是先把整个书翻翻,了解一下书的基本内容,然后在实际项目中遇到相应的问题再去翻书,当然这是因为我对技术已经有一定的了解,不需要通读整本书。初学者应该找一些适合自己的书,通读一遍,其中的例子要认真做,一定要自己去写代码,而不是Copy。

我以前在学做网页的时候,别人都用Dreamweaver去做,只有我打开源代码编辑器学习HTML源代码的编写。做完书的例子只能说明你已经懂得了一些皮毛。

永远不要认为书本能给你带来多少东西,虽然它们很有用,但它们只是一个Key,一个引你入门的Key。我买的技术书中,最多的是VB.Net,但这却是我最烂的一门技术。而我用得比较好的Delphi、SqlServer、Photoshop、CoreDRAW、CSS、HTML、Java、Xslt、Xml,我几乎没有买书,但因为实际的项目需要,或者是我个人的兴趣爱好。

当然,我并不是反对你启蠢去买书,去读书,我只是想告诉你,你需要有一种平和的心态。但你要记住,书本只是一个Key。

二、关于基础

现在很多新人们都是好高骛远,目空一切,基础的东西不想做,难一点的东西又做不了,真的很令人头疼。其实技术人员,尤其是中国技术人员,你要懂的东西太多太多了。

我们拿Web程序员举例吧,HTML、Java、CSS、Photoshop切图,这些厅皮都是很基础的东西,但很多人就是不愿意去学,认为这些东西太低级,甚至有些老程扮旁差序员也不擅长这些。

但我要告诉你,在Web开发中,这些都很重要,尤其是CSS和HTML、Java,如果你不是做一个OA之类办公的Web系统的话,这些在网站用得太多太多了,是一些Web应用的基础,所以一定要打好基础,当你会在记事本编辑这些代码的时候,恭喜你,你过关了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12451222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存