标签归档:Java

Java图片压缩代码

在网上搜了一圈,终于找到一个靠谱点的。共享给大家:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.img;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
 *
 * @author 可乐加糖
 */
public class CompressPicDemo {
     private File file = null; // 文件对象 
	 private String inputDir; // 输入图路径
	 private String outputDir; // 输出图路径
	 private String inputFileName; // 输入图文件名
	 private String outputFileName; // 输出图文件名
	 private int outputWidth = 100; // 默认输出图片宽
	 private int outputHeight = 100; // 默认输出图片高
	 private boolean proportion = true; // 是否等比缩放标记(默认为等比缩放)
	 public CompressPicDemo() { // 初始化变量
		 inputDir = ""; 
		 outputDir = ""; 
		 inputFileName = ""; 
		 outputFileName = ""; 
		 outputWidth = 100; 
		 outputHeight = 100; 
	 } 
	 public void setInputDir(String inputDir) { 
		 this.inputDir = inputDir; 
	 } 
	 public void setOutputDir(String outputDir) { 
		 this.outputDir = outputDir; 
	 } 
	 public void setInputFileName(String inputFileName) { 
		 this.inputFileName = inputFileName;
	 } 
	 public void setOutputFileName(String outputFileName) { 
		 this.outputFileName = outputFileName; 
	 } 
	 public void setOutputWidth(int outputWidth) {
		 this.outputWidth = outputWidth; 
	 } 
	 public void setOutputHeight(int outputHeight) { 
		 this.outputHeight = outputHeight; 
	 } 
	 public void setWidthAndHeight(int width, int height) { 
		 this.outputWidth = width;
		 this.outputHeight = height; 
	 } 

	 /* 
	  * 获得图片大小 
	  * 传入参数 String path :图片路径 
	  */ 
	 public long getPicSize(String path) { 
		 file = new File(path); 
		 return file.length(); 
	 }

	 // 图片处理 
	 public String compressPic() { 
		 try { 
			 //获得源文件 
			 file = new File(inputDir + inputFileName); 
			 if (!file.exists()) { 
				 return ""; 
			 } 
			 Image img = ImageIO.read(file); 
			 // 判断图片格式是否正确 
			 if (img.getWidth(null) == -1) {
				 System.out.println(" can't read,retry!" + "<BR>"); 
				 return "no"; 
			 } else { 
				 int newWidth; int newHeight; 
				 // 判断是否是等比缩放 
				 if (this.proportion == true) { 
					 // 为等比缩放计算输出的图片宽度及高度 
					 double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1; 
					 double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1; 
					 // 根据缩放比率大的进行缩放控制 
					 double rate = rate1 > rate2 ? rate1 : rate2; 
					 newWidth = (int) (((double) img.getWidth(null)) / rate); 
					 newHeight = (int) (((double) img.getHeight(null)) / rate); 
				 } else { 
					 newWidth = img.getWidth(null); // 输出的图片宽度 
					 newHeight = img.getHeight(null); // 输出的图片高度 
				 } 
			 	BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB); 

			 	/*
				 * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的
				 * 优先级比速度高 生成的图片质量比较好 但速度慢
				 */ 
			 	tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
			 	FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
			 	// JPEGImageEncoder可适用于其他图片类型的转换 
			 	JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
			 	encoder.encode(tag); 
			 	out.close(); 
			 } 
		 } catch (IOException ex) { 
			 ex.printStackTrace(); 
		 } 
		 return "ok"; 
	} 
 	public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) { 
 		// 输入图路径 
 		this.inputDir = inputDir; 
 		// 输出图路径 
 		this.outputDir = outputDir; 
 		// 输入图文件名 
 		this.inputFileName = inputFileName; 
 		// 输出图文件名
 		this.outputFileName = outputFileName; 
 		return compressPic(); 
 	} 
 	public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) { 
 		// 输入图路径 
 		this.inputDir = inputDir; 
 		// 输出图路径 
 		this.outputDir = outputDir; 
 		// 输入图文件名 
 		this.inputFileName = inputFileName; 
 		// 输出图文件名 
 		this.outputFileName = outputFileName; 
 		// 设置图片长宽
 		setWidthAndHeight(width, height); 
 		// 是否是等比缩放 标记 
 		this.proportion = gp; 
 		return compressPic(); 
 	} 

 	// main测试 
 	// compressPic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
 	public static void main(String[] arg) { 
 		CompressPicDemo mypic = new CompressPicDemo(); 
 		System.out.println("输入的图片大小:" + mypic.getPicSize("e:\\1.jpg")/1024 + "KB"); 
                mypic.compressPic("e:\\", "e:\\test\\", "1.jpg", "r1.jpg", 120, 120, false); 

 	} 
}

 

推荐功能的实现理论文章

SNS中一个比较重要的功能就是找出有同类爱好,或者相同需求的人,并把两者关联起来,其实现机制可以通过以下三篇文章来诠释,写的非常的不错,推荐一下

 

  1. 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
  2. 探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 – 协同过滤
  3. 探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 – 聚类

 

Ubuntu 下 tomcat 的安装

啥的搞定了,就是TOMCAT搞不定!!!
玩 Ubuntu 也有好些日子了,环境都配置好了,就是TOMCAT搭建不起来,通过GOOGLE之后才了解

擦,原来是没有给账户配置 .sh 文件的权限,导致文件一直无法执行。配置完成后问题解决。

截图:

《 Think in Java 》读书笔记 (1)斐波那契数列

一直想好好的学习一门后端语言,用来强化自己的开发水品。万事开头都要打好一个坚实的基础。自己以前做过 Java ,咱还是首选 Java 吧。看完了《面向对象设计导论》对OOP有了进一步的了解,对栈堆,堆,动态分配,Java的语言机制,运行环境有了进一步加深的了解。聚合,组合这样的OOP概念看起来有混淆,但是确实还是有很大的区别。Java的内存回收,垃圾处理。容器,运作环境等等等等进行了一次深入的回顾。

不可否认,这是一本好书,刚好今天做了一个练习,斐波那契的数列的练习。发出来把源码共享下。 继续阅读

commons-fileupload 文件上传实例

这是 JavaEye 上的一篇帖子,写的实在很细腻.方法,思路完全都表述清楚了,值得推荐一下.

Fileupload 组件是 apache 下的一个开源组件, 另外还有 cos,smartUpload.

记得看过一片帖子,有开发人员做过对比.

cos 在传文件的时候,效率更高效,FileUpload其次,然后是 smartUpload .并且 smartUpload 在上传文件过大的时候容易引起崩溃..

(链接地址稍后给出)

这篇文章是介绍 FileUpload 控件的

http://www.javaeye.com/topic/83800

常用的LOG4J配置


log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true

# 应用于控制台

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

#应用于文件

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis

# 应用于文件回滚

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

# 发送日志给邮件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

#自定义Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

response.setContentType 的参数说明

image/bmp BMP
image/gif GIF
image/jpeg JPEG
image/tiff TIFF
image/x-dcx DCX
image/x-pcx PCX
text/html HTML
text/plain TXT
text/xml XML
application/afp AFP
application/pdf PDF
application/rtf RTF
application/msword MSWORD
application/vnd.ms-excel MSEXCEL
application/vnd.ms-powerpoint MSPOWERPOINT
application/wordperfect5.1 WORDPERFECT
application/vnd.lotus-wordpro WORDPRO
application/vnd.visio VISIO
application/vnd.framemaker FRAMEMAKER
application/vnd.lotus-1-2-3 LOTUS123
application/octet-stream 信息流

Java环境变量设置

首先打开系统属性,选择高级,打开环境设置;
在上面用户变量区中新建3个变量:
1、JAVA_HOME
2、PATH
3、CLASSPATH
这3个变量的值分别如下:
JAVA_HOME = E:\fairypark\CSDP\java
PATH = .;%JAVA_HOME%\bin;
CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
需要强调一点,你的java安装路径E:\fairypark\CSDP\java这个目录下有bin目录吗,如果有这个
目录就是你的Java主目录,如果没有在其下面找到含有bin的目录,将此目录设置给JAVA_HOME变量。