Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
device-back
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
device-back
Commits
4ba4d669
提交
4ba4d669
authored
7月 21, 2021
作者:
zhoushaopan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[图片]切割图片
上级
cf4dd5aa
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
217 行增加
和
0 行删除
+217
-0
ImageCut.java
...rc/main/java/com/tykj/dev/device/zxing/util/ImageCut.java
+217
-0
没有找到文件。
dev-zxing/src/main/java/com/tykj/dev/device/zxing/util/ImageCut.java
0 → 100644
浏览文件 @
4ba4d669
package
com
.
tykj
.
dev
.
device
.
zxing
.
util
;
import
javax.imageio.ImageIO
;
import
javax.imageio.ImageReadParam
;
import
javax.imageio.ImageReader
;
import
javax.imageio.stream.ImageInputStream
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.Iterator
;
/**
* DATE:2021-7-20
* Author:zsp
*/
public
class
ImageCut
{
/**
* 源图片路径名称如:c:\1.jpg
*/
// private String srcpath = "e:/poool.jpg";
private
String
srcpath
=
"C:\\Users\\lenovo\\Desktop\\1.png"
;
/**
* 剪切图片存放路径名称.如:c:\2.jpg
*/
// private String subpath = "e:/pool_end";
private
String
subpath
=
"C:\\Users\\lenovo\\Desktop\\20.png"
;
/**
* jpg图片格式
*/
private
static
final
String
IMAGE_FORM_OF_JPG
=
"jpg"
;
/**
* png图片格式
*/
private
static
final
String
IMAGE_FORM_OF_PNG
=
"png"
;
/**
* 剪切点x坐标
*/
private
int
x
;
/**
* 剪切点y坐标
*/
private
int
y
;
/**
* 剪切点宽度
*/
private
int
width
;
/**
* 剪切点高度
*/
private
int
height
;
public
ImageCut
()
{
}
public
ImageCut
(
int
x
,
int
y
,
int
width
,
int
height
)
{
this
.
x
=
x
;
this
.
y
=
y
;
this
.
width
=
width
;
this
.
height
=
height
;
}
// public static void main(String[] args) throws Exception {
// ImageCut imageCut = new ImageCut(300, 130, 550, 550);
// imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
// System.out.println("可截取");
// }
/**
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
*
* @param postFix
* 文件的后缀名
* @return
*/
public
Iterator
<
ImageReader
>
getImageReadersByFormatName
(
String
postFix
)
{
switch
(
postFix
)
{
case
IMAGE_FORM_OF_JPG:
return
ImageIO
.
getImageReadersByFormatName
(
IMAGE_FORM_OF_JPG
);
case
IMAGE_FORM_OF_PNG:
return
ImageIO
.
getImageReadersByFormatName
(
IMAGE_FORM_OF_PNG
);
default
:
return
ImageIO
.
getImageReadersByFormatName
(
IMAGE_FORM_OF_JPG
);
}
}
/**
* 对图片裁剪,并把裁剪完蛋新图片保存 。
* @param srcpath 源图片路径
* @param subpath 剪切图片存放路径
* @throws IOException
*/
public
void
cut
(
String
srcpath
,
String
subpath
)
throws
IOException
{
FileInputStream
is
=
null
;
ImageInputStream
iis
=
null
;
try
{
// 读取图片文件
is
=
new
FileInputStream
(
srcpath
);
// 获取文件的后缀名
String
postFix
=
getPostfix
(
srcpath
);
System
.
out
.
println
(
"图片格式为:"
+
postFix
);
/*
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
*/
Iterator
<
ImageReader
>
it
=
getImageReadersByFormatName
(
postFix
);
ImageReader
reader
=
it
.
next
();
// 获取图片流
iis
=
ImageIO
.
createImageInputStream
(
is
);
/*
* <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索'。
* 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
*/
reader
.
setInput
(
iis
,
true
);
/*
* <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O
* 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 ImageReader 实现的
* getDefaultReadParam 方法中返回 ImageReadParam 的实例。
*/
ImageReadParam
param
=
reader
.
getDefaultReadParam
();
/*
* 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
* 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
*/
Rectangle
rect
=
new
Rectangle
(
x
,
y
,
width
,
height
);
// 提供一个 BufferedImage,将其用作解码像素数据的目标。
param
.
setSourceRegion
(
rect
);
/*
* 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
* BufferedImage 返回。
*/
BufferedImage
bi
=
reader
.
read
(
0
,
param
);
// 保存新图片
ImageIO
.
write
(
bi
,
postFix
,
new
File
(
subpath
+
"_"
+
new
Date
().
getTime
()
+
"."
+
postFix
));
}
finally
{
if
(
is
!=
null
)
is
.
close
();
if
(
iis
!=
null
)
iis
.
close
();
}
}
/**
* 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>
*
* @param inputFilePath
* @return
*/
public
String
getPostfix
(
String
inputFilePath
)
{
return
inputFilePath
.
substring
(
inputFilePath
.
lastIndexOf
(
"."
)
+
1
);
}
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
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论