文档章节

Java处理图片

johnnyhg
 johnnyhg
发布于 2009/05/08 00:19
字数 489
阅读 610
收藏 3

图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理.

下面的程序使用jdk1.4中最新的ImageIO对图片进行读写.使用AffineTransform对图片进行缩放.

 


import java.io.File;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.image.AffineTransformOp;
import javax.imageio.ImageIO;
import java.awt.geom.AffineTransform;

public class UploadImg{

/**
* @param fromdir 图片的原始目录
* @param todir 处理后的图片存放目录
* @param imgfile 原始图片
* @param sysimgfile 处理后的图片文件名前缀
*
*/

............................


public boolean CreateThumbnail() throws Exception
{
//ext是图片的格式 gif JPG 或png
String ext=\"\";
double Ratio=0.0;
File F = new File(fromdir,imgfile);
if (!F.isFile())
throw new Exception(F+\" is not image file error in CreateThumbnail!\");

//首先判断上传的图片是gif还是JPG ImageIO只能将gif转换为png
if (isJpg(imgfile)){
ext=\"jpg\";
}else{
ext=\"png\";
}
File ThF = new File(todir,sysimgfile+\".\"+ext);


BufferedImage Bi = ImageIO.read(F);
//假设图片宽 高 最大为120 120
Image Itemp = Bi.getScaledInstance (120,120,Bi.SCALE_SMOOTH);


if ((Bi.getHeight()>120) || (Bi.getWidth()>120)){
if (Bi.getHeight()>Bi.getWidth())
Ratio = 120.0/Bi.getHeight();
else
Ratio = 120.0/Bi.getWidth();
}


AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp = op.filter(Bi, null);

try {
ImageIO.write((BufferedImage)Itemp, ext, ThF);
}catch (Exception ex) {
throw new Exception(\" ImageIo.write error in CreatThum.: \"+ex.getMessage());
}
return (true);
}
}

该程序使用了Java 的AWT,在linux下运行可能报错,有两种解决方式:

(1) jdk1.4以前版本:需要安装 XFree86和XFree86-Xvfb ,加入 export DISPLAY=hostdomain:0.0

(2) jdk 1.4以后版本,执行命令java 加入参数-Djava.awt.headless=true,表示这是一个没有键盘 没有显示器的无头服务器,意称机房托管的服务器。



已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



本文转载自:http://johnnyhg.javaeye.com/blog/249051

johnnyhg
粉丝 15
博文 27
码字总数 9
作品 0
海淀
私信 提问
linux sun/awt/X11GraphicsEnvironment 图片处理问题

关于 在linux 上出现 Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit 问题 搜索到如下资料: 在Linux下,我们在用java的图片包来处理图片时,...

肥皂泡2
2011/07/14
0
0
图片优化问题!java代码

现在有个问题,就是要用JAVA处理一些JPG或者是PNG的图片,但是这些图片都很精美的那种,分辨率比较高,一般都有几百K,但是我们想在网络上传送 这些图,主要是文件大小不能大,并且也不需要效...

苏别v
2015/07/09
170
1
Notification小例子

一:你可学到 手机内依据Uri查看联系人 权限的添加 获取手机内任意一款应用的应用图标 对图形的处理,如复制,为图片加上覆盖层--数字。 使用RemoteView自定义Notification 二:开始行动 新建...

迷途d书童
2012/03/30
711
1
java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的
2018/05/26
0
0
java图像处理怎么实现短视频的读取和图像的显示

新手学习使用Java,尝试着做一个项目使用Java做一个视频图像的处理。读取视频然后对每帧图像做检测处理,想问Java怎么实现视频的读取和图片的输出?我的Java版本是jdk1.8.0_91,试着用Image...

sycier
2016/07/22
749
2

没有更多内容

加载失败,请刷新页面

加载更多

识别图片内容,并将相应内容写到对应文本文件中

# -*- coding: utf-8 -*-"""Created on Thu Apr 18 17:05:47 2019@author: HeyJude"""import timestart_time = time.time()def GetText(pic_path, text_path): import pytesser......

KYO4321
10分钟前
1
0
Java多线程之创建线程的三种方式比较

一:继承Thread类创建线程 1:继承Thread类定义线程子类; 2:重写run()方法,定义线程的操作; 3:通过创建的线程子类对象.start() 启动线程。 package com.thread; public class First...

天王盖地虎626
13分钟前
0
0
inner join 与 left join 之间的区别

关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了。 需求是从数据库查数据,在前端以柱形图的形式...

dragon_tech
14分钟前
1
0
linux下cpio.gz文件的解压方法

linux下cpio.gz文件的解压方法 linux下cpio.gz文件的解压方法linux解压cpiocpio.gz 今天下载了 10201_database_linux_x86_64.cpio.gz 文件,解压方法如下: 1. gunzip 10201_database_linux...

突突突酱
16分钟前
1
0
Shell分析服务器日志,解锁各种新姿势

Shell分析服务器日志,解锁各种新姿势 DevOps技术栈 5月10日 作者:Panda 原文:https://segmentfault.com/a/1190000009745139 自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服...

linzhuangrong
19分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部