package com.hphoto.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Properties;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.hphoto.bean.Category;
import com.hphoto.bean.UserProfile;
import com.hphoto.image.AbstractBufferedImageOp;
import com.hphoto.image.AdvanceScaleFilter;
import com.hphoto.image.ScaleFilter;
import com.hphoto.image.TwirlFilter;
import com.hphoto.server.ImageManipulation;
public class Test {
static void printMem(){
Runtime rt=Runtime.getRuntime( );
System.out.println("Total Memory= "
+ rt.totalMemory() //��ӡ���ڴ��С
+" Free Memory = "
+ rt.freeMemory()
+ "\t" + (rt.totalMemory() / (1024 * 1024)) + ":"+(rt.freeMemory() /(1024 * 1024))
); //��ӡ�����ڴ��С
}
static void printTrue(boolean value){
/*
for(int i = 7 ; i >= 0 ; i--){
if(((1 << i)& (int)value) != 0)
System.out.print("1");
else
System.out.print("0");
}
*/
}
static void printByte(byte value){
for(int i = 16 ; i >= 0 ; i--){
if(((1 << i)& value) != 0)
System.out.print("1");
else
System.out.print("0");
}
}
static void printInt(int value){
for(int i = 31 ; i >= 0 ; i--){
if(((1 << i)& value) != 0)
System.out.print("1");
else
System.out.print("0");
}
}
static void printLong(long value){
for(int i = 63 ; i >= 0 ; i--){
if(((1L << i)& value) != 0)
System.out.print("1");
else
System.out.print("0");
}
}
/** Construct a half-sized version of this MD5. Fits in a long **/
public static long halfDigest(byte[] digest) {
long value = 0;
for (int i = 0; i < 16; i++)
value |= ((digest[i] & 0xffL) << (16*(15-i)));
return value;
}
private class Kuaiche implements Comparable{
private int i;
public Kuaiche(int i){
this.i =i;
}
public String toString(){
return "\t"+Integer.toString(i);
}
public int compareTo(Object o) {
Kuaiche other = (Kuaiche)o;
return (this == other) ? 0 : this.i > other.i ? -1 : 1;
}
}
public void doTest(){
Kuaiche[] k;// = new Kuaiche[10];
Random r = new Random();
ArrayList list = new ArrayList();
for(int i = 0;i < 10 ; i++){
int l = Math.abs(r.nextInt() % 100);
System.out.println(l);
//k[i] = new Kuaiche(l);
list.add(new Kuaiche(l));
}
k = (Kuaiche[]) list.toArray(new Kuaiche[0]);
Arrays.sort(k);
for(int i = 0;i < 10; i++ ){
System.out.println(k[i]);
}
}
Random generator = new Random();
String[] font = {
"Arial",
"Courier"
};
Color[] color = {
Color.black,
Color.blue,
Color.green,
Color.orange,
Color.red,
Color.yellow
};
private Font[] getFont(){
return getFont(font,40);
}
private Font[] getFont(String[] font,int size){
Font[] fonts = new Font[font.length];
for(int i = 0 ; i < font.length ; i++ ){
fonts[i] = new Font(font[i],Font.BOLD,size);
}
return fonts;
}
private void shear(Graphics g, int w1, int h1, Color color) {
shearX(g, w1, h1, color);
shearY(g, w1, h1, color);
}
public void shearX(Graphics g, int w1, int h1, Color color) {
int period = generator.nextInt(10) + 5;
boolean borderGap = true;
int frames = 15;
int phase = generator.nextInt(5) + 2;
for (int i = 0; i < h1; i++) {
double d =
(double) (period >> 1)
* Math.sin(
(double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.copyArea(0, i, w1, 1, (int) d, 0);
if (borderGap) {
g.setColor(color);
g.drawLine((int) d, i, 0, i);
g.drawLine((int) d + w1, i, w1, i);
}
}
}
public void shearY(Graphics g, int w1, int h1, Color color) {
int period = generator.nextInt(30) + 10; // 50;
boolean borderGap = true;
int frames = 15;
int phase = 7;
for (int i = 0; i < w1; i++) {
double d =
(double) (period >> 1)
* Math.sin(
(double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.copyArea(i, 0, 1, h1, 0, (int) d);
if (borderGap) {
g.setColor(color);
g.drawLine(i, (int) d, i, 0);
g.drawLine(i, (int) d + h1, i, h1);
}
}
}
public String saveVerifyImage(int width,int height,OutputStream out) throws Exception{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_BYTE_INDEXED);
// ��ȡͼ��������
Graphics2D g = (Graphics2D) image.getGraphics();
// �趨����ɫ
g.setColor(new Color(0xFFFFFF));
g.fillRect(0, 0, width, height);
//g.drawRect(0,0,width-1,height-1);
String word = "acpgh";//tempNumber.toString();
float w = (float) (width * 0.6F);
float h = (float) (height * 0.2F);
int d = (int) (w / word.length());
//g.setFont(new Font("Arial",Font.BOLD,(int)(height - (h * 2))));
RenderingHints hints = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
hints.add(new RenderingHints(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY));
g.setRenderingHints(hints);
Font[] fonts = getFont();
char[] wc = word.toCharArray();
FontRenderContext frc = g.getFontRenderContext();
int startPosX = 25;
//������ɫ
g.setColor(color[(int) (Math.random()*color.length)]);
for (int i = 0;i<wc.length;i++) {
char[] itchar = new char[]{wc[i]};
//g2D.setColor(Color.black);
int choiceFont = generator.nextInt(fonts.length) ;
Font itFont = fonts[choiceFont];
g.setFont(itFont);
LineMetrics lmet = itFont.getLineMetrics(itchar,0,itchar.length,frc);
GlyphVector gv = itFont.createGlyphVector(frc, itchar);
double charWitdth = gv.getVisualBounds().getWidth();
g.drawChars(itchar,0,itchar.length,(int)((((float) (width * 0.2F)) + d*i)) ,height/2 + 10);
startPosX = startPosX+(int)charWitdth+2;
//
}// for next char array.
/*
for(int i = 0 ; i < word.length(); i++){
String s = word.substring(i,i+1);
g.drawString(s,(int)((((float) (width * 0.2F)) + d*i)),height/2 + 10);
}
*/
/*
WarpGrid source = new WarpGrid(6,10,width,height);
WarpGrid dist = new WarpGrid(6,10,width,height);
WarpFilter filter = new WarpFilter(source,dist);
*/
/*
FieldWarpFilter filter = new FieldWarpFilter();
filter.setAmount(0.8f);
filter.setPower(0.2f);
filter.setStrength(10f);
*/
TwirlFilter filter = new TwirlFilter();
filter.setCentreX(0.5f);
filter.setCentreY(0.5f);
float angle = (float) Math.asin(Math.random() > 0.5 ?(float) Math.random():-(float) Math.random());
//System.out.println(angle);
filter.setAngle(angle);
filter.setRadius(w / 2 + 5);
ColorModel dstCM = image.getColorModel();
BufferedImage dst = new BufferedImage(dstCM, dstCM.createCompatibleWritableRaster(width, height), dstCM.isAlphaPremultiplied(), null);
image = filter.filter(image, dst);
ImageIO.write(image, "JPEG",out);
return word;
}
static Category get(){
return null;
}
private static String parserText(final String text){
StringBuilder sb = new StringBuilder(text.length());
for(int i = 0 ; i < text.length() ;i++){
/*
& &
< ⁢
> >
" "
' '
*/
char s = text.charAt(i);
switch(s){
case 38: sb.append("&");
break;
case 60: sb.append("⁢");
break;
case 62: sb.append(">");
break;
case 34: sb.append(""");
break;
case 39: sb.append("'");
break;
default : sb.append(s);
}
}
return sb.toString();
}
protected static String getLegalXml(final String text) {
if (text == null) {
return null;
}
StringBuffer buffer = null;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (!isLegalXml(c)) {
if (buffer == null) {
// Start up a buffer. Copy characters here from now on
// now we've found at least one bad character in original.
buffer = new StringBuffer(text.length());
buffer.append(text.substring(0, i));
}
} else {
if (buffer != null) {
buffer.append(c);
}
}
}
return (buffer != null)? buffer.toString(): text;
}
private static boolean isLegalXml(final char c) {
return c == 0x9 || c == 0xa || c == 0xd || (c >= 0x20 && c <= 0xd7ff)
|| (c >= 0xe000 && c <= 0xfffd) || (c >= 0x10000 && c <= 0x10ffff);
}
private static Element addNode(Document doc, Node parent,
String name, String text) {
Element child = doc.createElement(name);
child.appendChild(doc.createTextNode(getLegalXml(text)));
parent.appendChild(child);
return child;
}
private static Element addNode(Document doc, Node parent, String name) {
Element child = doc.createElement(name);
parent.appendChild(child);
return child;
}
static long dirlength;//����Ŀ¼��С�ı���
static void sdl(String dirname)
{
File dir=new File(dirname);
String f[]=dir.list();
File f1;
for(int i=0;i<f.length;i++)
{
f1 = new File (dirname+"/"+f[i]);
if (!f1.isDirectory())
dirlength+=f1.length();
else
sdl(dirname+"/"+f[i]);//�����Ŀ¼,�ݹ����
}
}
private static long getDU(String path,long l){
File file = new File(path);
String[] f = file.list();
File f1;
for(String fe :f){
//if is file
f1 = new File (path+"/"+fe);
if(!f1.isDirectory())
l += fe.length();
else{
l += getDU(path+"/"+ fe,l);
//System.out.println(fe.getPath() + "" + l);
}
}
return l;
}
public static void Raise(int width,int height,int max){
float rate = (float)width/(float)height;
/*
if(rate > 1){
rate = (float)max / (float)height;
width *= rate;
height *= rate;
}else{
rate = (float)max /(float)width;
width *= rate;
height *=rate;
}
*/
if(rate > 1){
width = max;
height = (int)(max/rate);
}else{
width = (int) (max *rate);
height = max;
}
System.out.println(width + "," + height);
}
public static void main(String[] arg) throws ParserConfigurationException, TransformerException{
//int i=2592,n=3872;
//Raise(160,239,239);
//File f = new File("./");
//System.out.println(f.getPath());
//System.out.println(getDU("./",0l));
/*
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = factory.newDocumentBuilder().newDocument();
PrintStream out = System.out;
Element rss = addNode(doc, doc, "rss");
addNode(doc,rss,"descript","<a href=\"http://127.0.0.1/\"><img style=\"border:1px solid #5C7FB9\" src=\"\" alt=\"��Ů\"/></a></td>");
DOMSource source = new DOMSource(doc);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
//out.println(rss.toString());
/*
out.println(parserText("<a href=\"http://127.0.0.1/\"><img style=\"border:1px solid #5C7FB9\" src=\"\" alt=\"��Ů\"/></a></td>"));
out.println(getLegalXml(parserText("<a href=\"http://127.0.0.1/\"><img style=\"border:1px solid #5C7FB9\" src=\"\" alt=\"��Ů\"/></a></td>")));
/*
System.out.println(Locale.getDefault().getLanguage().toString().toLowerCase());
System.out.println(Locale.US.getLanguage().toString().toLowerCase());
System.out.println(Locale.UK.getLanguage().toString().toLowerCase());
/*
for( line = lines.readLine(); line != null; line = lines.readLine() ) {
if( line.equals("") )
continue;
if( line.startsWith( "Total # of bytes" ) ) {
this.capacity = Long.parseLong( line.substring(
line.lastIndexOf(' ') + 1, line.length() ));
continue;
}
if( line.startsWith( "Total # of avail free bytes" ) ) {
this.available = Long.parseLong( line.substring(
line.lastIndexOf(' ') + 1, line.length() ));
continue;
}
}
*/
/*
Calendar c=Calendar.getInstance();
c.add(Calendar.YEAR,30);
System.out.println(new Date());
System.out.println(new Date(c.getTimeInMillis()));
/*
System.out.println(StringUtil.formatPercent(0.0001D,1));
//System.out.println("/josh/josh/".indexOf("/josh"));
String patternStr = "^/image/([^/]+)/([^/]+)/([s])?([0-9]+)-?(.?)/\\1$";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher("/image/flashget/AHHYILU/s48-c/flashget");
//image/flashget/AHHYILU/s48-c/flashget
//System.out.println(matcher.find());
//String s = matcher.replaceAll("/image?u=$1&c=$5&max=$4");
//System.out.println(s);
// patternStr = "^/image/([^/]+)/([^/]+)/([s])?([0-9]+)-?(.?)/\\1$";
// pattern = Pattern.compile(patternStr);
//matcher = pattern.matcher("/image/flashget/AHHYILU/s48-c/flashget");
//matcher = pattern.matcher("/image/flashget/UntitledAlbum/s144/144115188075855872.jpg");
///image/flashget/UntitledAlbum/s144/144115188075855872.jpg
System.out.println(matcher.find());
String s = matcher.replaceAll("/image?u=$1&corp=$5&max=$4");
System.out.println(s);
//s = matcher.replaceAll("/hp/photo?user=$2&category=$4&id=$5&$6");
//System.out.println(s);
/*
* [^/]?\\???([^/]*)
String patternStr = "^/image/([^/]+)/([^/]+)/([s])?([0-9]+)-?(.?)/\1$";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher("/image/beijing.josh/category/s48-c/beijing.josh");
String s = matcher.replaceAll("/image?u=$1&c=$5&max=$4");
*/
/*
String[] p ={
"^/image/([^/]+)/([^/]+)/([s])?([0-9]+)-?(.?)/([^\\.]+)\\.jpg$",
"^/image/([^/]+)/([^/]+)/([s])?([0-9]+)-?(.?)/\\1",
"^/image/([^/]+)/([^/]+)/([^\\.]+)\\.jpg\\?[^0-9]*([0-9]*)"
};
String[] s0 = {
"/image/beijing.josh/category/s600/photoid.jpg",
"/image/beijing.josh/category/600-c/photoid.jpg",
"/image/beijing.josh/category/s600-c/photoid.jpg"
};
String[] s1 ={
"/image/beijing.josh/category/s48-c/beijing.josh"
};
String[] s2 ={
"/image/beijing.josh/category/photoid.jpg?max=600"
};
//for(int i = 0 ; i < p.length ; i++){
Pattern pattern = Pattern.compile(p[2]);
for(int n = 0 ; n < s0.length ;n++){
Matcher matcher = pattern.matcher(s0[n]);
if(matcher.find()){
System.out.println(s0[n]);
}
}
Pattern email = Pattern.compile("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");
Matcher matcher = email.matcher("bei@josm.com");
System.out.println(matcher.find());
//}
/*
for(int n = 0 ; n < s1.length ;n++){
Matcher matcher = pattern.matcher(s1[n]);
if(matcher.find()){
System.out.println(i + ":" + matcher.find());
System.out.println(s1[n]);
}
}
for(int n = 0 ; n < s2.length ;n++){
Matcher matcher = pattern.matcher(s2[n]);
if(matcher.find()){
System.out.println(i + ":" + matcher.find());
System.out.println(s2[n]);
}
}
*/
// Set the input
// matcher.reset("/image/beijing.josh/category/s48-c/beijing.josh");
// Get tagname and contents of tag
// boolean matchFound = matcher.find(); // true
//String tagname = matcher.group(1); // tag
//String contents = matcher.group(2); // yy
}
}