BufferedImage image=new BufferedImage(80, 20, BufferedImageTYPE_INT_RGB);
Graphics g=imagegetGraphics();
Random r=new Random();
gsetColor(new Color(rnextInt(255),rnextInt(255), rnextInt(255)));
gfillRect(0, 0, 80, 20);
gsetColor(ColorBLACK);
String num=rnextInt(99999)+"";
ActionContextgetContext()getSession()put("num", num);
gdrawString(num, 5, 15);
ByteArrayOutputStream os=new ByteArrayOutputStream();//创建内存输出流
JPEGImageEncoder encoder=JPEGCodeccreateJPEGEncoder(os); //将输出流用于 创建JPEG编码对象
try {
encoderencode(image);//编码
inputStream=new ByteArrayInputStream(ostoByteArray());//将输出流转换为输入流,以便存入内存,方便struts2xml中参数以getInputStream()获取
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
这是最近我们能上课讲的生成验证码的方法,包括创建
package com;
import javaioFile;
import javautilIterator;
import comdrewimagingjpegJpegMetadataReader;
import comdrewimagingjpegJpegProcessingException;
import comdrewmetadataDirectory;
import comdrewmetadataMetadata;
import comdrewmetadataTag;
import comdrewmetadataexifExifDirectory;
import comdrewmetadataexifGpsDirectory;
import comdrewmetadatajpegJpegDirectory;
public class Test {
public static void main(String[] args){
File jpegFile = new File("F:/定位/DCIM/P20130116_125539jpg");
Metadata metadata;
try {
metadata = JpegMetadataReaderreadMetadata(jpegFile);
Directory exif = metadatagetDirectory(ExifDirectoryclass);
Iterator tags1 = exifgetTagIterator();
while (tags1hasNext()) {
Tag tag = (Tag)tags1next();
Systemoutprintln(tag);
}
Directory jpeg = metadatagetDirectory(JpegDirectoryclass);
Iterator tags2 = jpeggetTagIterator();
while (tags2hasNext()) {
Tag tag = (Tag)tags2next();
Systemoutprintln(tag);
}
Directory gps = metadatagetDirectory(GpsDirectoryclass);
Iterator tags3 = gpsgetTagIterator();
while (tags3hasNext()) {
Tag tag = (Tag)tags3next();
Systemoutprintln(tag);
}
} catch (JpegProcessingException e) {
eprintStackTrace();
}
}
}
也就是压缩,可以不修改任何大小的压缩(速度快),也可等比例修改大小压缩(较慢)
下面这是一段等比例缩小的方法。
public String compressPic(String inputDir, String outputDir,
String inputFileName, String outputFileName, int width,
int height, boolean gp,String hzm) {
try {
if (!imageexists()) {
return "";
}
Image img = ImageIOread(image);
// 判断格式是否正确
if (imggetWidth(null) == -1) {
return "no";
} else {
int newWidth; int newHeight;
// 判断是否是等比缩放
if (gp == true) {
// 为等比缩放计算输出的宽度及高度
double rate1 = ((double) imggetWidth(null)) / (double) width ;
double rate2 = ((double) imggetHeight(null)) / (double) height ;
// 根据缩放比率大的进行缩放控制
double rate = rate1 > rate2 rate1 : rate2;
newWidth = (int) (((double) imggetWidth(null)) / rate);
newHeight = (int) (((double) imggetHeight(null)) / rate);
} else {
newWidth = imggetWidth(null); // 输出的宽度
newHeight = imggetHeight(null); // 输出的高度
}
BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImageTYPE_INT_RGB);
/
ImageSCALE_SMOOTH 的缩略算法 生成缩略的平滑度的
优先级比速度高 生成的质量比较好 但速度慢
/
Image im = imggetScaledInstance(newWidth, newHeight, ImageSCALE_SMOOTH);
taggetGraphics()drawImage(im, 0, 0, null);
FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
//JPEGImageEncoder可适用于其他类型的转换
JPEGImageEncoder encoder = JPEGCodeccreateJPEGEncoder(out);
encoderencode(tag);
outclose();
}
} catch (IOException ex) {
exprintStackTrace();
}
return "ok";
}
你要实现的是啥东西?
java? 是说的jsp在页面调否?
不管怎么滴,一个宗旨:按钮click也好,其他事件也好,触发后,获取pic的width+10或者11
总之就是改变长宽而已。
后台获取到文件了么FilegetName就是文件名了
这个方法就是保存文件用的了 调用saveFile(filegetInputStrean,filegetName);
private void saveFile(InputStream inputStream, String fileName) {OutputStream os = null; try {
String path = "D:\\testFile\\"; // 2、保存到临时文件 // 1K的数据缓冲
byte[] bs = new byte[1024]; // 读取到的数据长度
int len; // 输出的文件流保存到本地文件
File tempFile = new File(path); if (!tempFileexists()) {
tempFilemkdirs();
}
os = new FileOutputStream(tempFilegetPath() + Fileseparator + fileName); // 开始读取
while ((len = inputStreamread(bs)) != -1) {
oswrite(bs, 0, len);
}
} catch (IOException e) {
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
} finally { // 完毕,关闭所有链接
try {
osclose();
inputStreamclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
以上就是关于java 已知每个像素的c,m,y,k的值,和图片长宽,如何生成图片全部的内容,包括:java 已知每个像素的c,m,y,k的值,和图片长宽,如何生成图片、java 编写客户端 获取图片、java如何实现把一个大图片压缩到指定大小的图片且长宽比不变等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)