레이블이 java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 java인 게시물을 표시합니다. 모든 게시물 표시

2011년 3월 10일 목요일

java tiff dpi setting

import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.imageio.metadata.*;
import javax.imageio.stream.*;
import org.w3c.dom.*;
import com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet;
import com.sun.media.imageio.plugins.tiff.TIFFDirectory;
import com.sun.media.imageio.plugins.tiff.TIFFField;
import com.sun.media.imageio.plugins.tiff.TIFFTag;

/**
* Example class showing two ways to write DPI values to a TIFF image.
*/
public class TIFFWriteDPI {
private static String METADATA_NAME =
"com_sun_media_imageio_plugins_tiff_image_1.0";

private static int DPI_X = 42;
private static int DPI_Y = 24;

public static void main(String[] args) throws Throwable {
// Create sample image.
RenderedImage image = new BufferedImage(256, 256,
BufferedImage.TYPE_3BYTE_BGR);

// Get TIFF writer.
Iterator writers = ImageIO.getImageWritersByFormatName("TIFF");
if(writers == null || !writers.hasNext())
throw new IllegalStateException("No TIFF writers!");
ImageWriter writer = (ImageWriter)writers.next();

// Get the default image metadata.
ImageTypeSpecifier imageType =
ImageTypeSpecifier.createFromRenderedImage(image);
IIOMetadata imageMetadata =
writer.getDefaultImageMetadata(imageType, null);

// Set DPI.
String fileName;
String methodology;
if(args.length == 0 || args[0].equalsIgnoreCase("DOM")) {
fileName = "dpi_dom.tif";
setDPIViaDOM(imageMetadata);
methodology = "DOM";
} else {
fileName = "dpi_api.tif";
imageMetadata = setDPIViaAPI(imageMetadata);
methodology = "API";
}

System.out.println("\nWriting "+fileName+
" using "+methodology+" methodology\n");

// Write image.
writer.setOutput(new FileImageOutputStream(new File(fileName)));
writer.write(new IIOImage(image, null, imageMetadata));
}

/**
* Set DPI using DOM nodes.
*/
private static void setDPIViaDOM(IIOMetadata imageMetadata)
throws IIOInvalidTreeException {
// Get the DOM tree.
IIOMetadataNode root =
(IIOMetadataNode)imageMetadata.getAsTree(METADATA_NAME);

// Get the IFD.
IIOMetadataNode ifd =
(IIOMetadataNode)root.getElementsByTagName("TIFFIFD").item(0);

// Get {X,Y}Resolution tags.
BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance();
TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION);
TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION);

// Create {X,Y}Resolution nodes.
IIOMetadataNode nodeXRes = createRationalNode(tagXRes.getName(),
tagXRes.getNumber(),
DPI_X, 1);
IIOMetadataNode nodeYRes = createRationalNode(tagYRes.getName(),
tagYRes.getNumber(),
DPI_Y, 1);

// Append {X,Y}Resolution nodes to IFD node.
ifd.appendChild(nodeXRes);
ifd.appendChild(nodeYRes);

// Set metadata from tree.
imageMetadata.setFromTree(METADATA_NAME, root);
}

/**
* Creates a node of TIFF data type RATIONAL.
*/
private static IIOMetadataNode createRationalNode(String tagName,
int tagNumber,
int numerator,
int denominator) {
// Create the field node with tag name and number.
IIOMetadataNode field = new IIOMetadataNode("TIFFField");
field.setAttribute("name", tagName);
field.setAttribute("number", "" + tagNumber);

// Create the RATIONAL node.
IIOMetadataNode rational = new IIOMetadataNode("TIFFRational");
rational.setAttribute("value", numerator+"/"+denominator);

// Create the RATIONAL node and append RATIONAL node.
IIOMetadataNode rationals = new IIOMetadataNode("TIFFRationals");
rationals.appendChild(rational);

// Append RATIONALS node to field node.
field.appendChild(rationals);

return field;
}

/**
* Set DPI using API.
*/
private static IIOMetadata setDPIViaAPI(IIOMetadata imageMetadata)
throws IIOInvalidTreeException {
// Derive the TIFFDirectory from the metadata.
TIFFDirectory dir = TIFFDirectory.createFromMetadata(imageMetadata);

// Get {X,Y}Resolution tags.
BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance();
TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION);
TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION);

// Create {X,Y}Resolution fields.
TIFFField fieldXRes = new TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL,
1, new long[][] {{DPI_X, 1}});
TIFFField fieldYRes = new TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL,
1, new long[][] {{DPI_Y, 1}});

// Append {X,Y}Resolution fields to directory.
dir.addTIFFField(fieldXRes);
dir.addTIFFField(fieldYRes);

// Convert to metadata object and return.
return dir.getAsMetadata();
}
}

Tiff G4 conversion

BufferedImage outputImage = new BufferedImage(ire.getWidth(null), ire.getHeight(null), BufferedImage.TYPE_BYTE_BINARY);
outputImage.createGraphics().drawImage(ire, 0, 0, null);

TIFFEncodeParam param = new TIFFEncodeParam();
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);

FileOutputStream stream = new FileOutputStream(new File(path));

TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec.createImageEncoder("tiff", stream, param);
encoder.encode(outputImage);




//=====================================
ImageOutputStream out = ImageIO.createImageOutputStream(new File("c:\\temp\\ggg.tif"));

ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();

ImageWriteParam param2 = writer.getDefaultWriteParam();
param2.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param2.setCompressionType("CCITT T.4");

writer.setOutput(out);
writer.write(null,new IIOImage(ImageIO.read(new File(path)),null,null), param2);

writer.dispose();
out.close();
//=====================================

jpeg2000 conversion

< %@ page language="java" contentType="image/jpeg" pageEncoding="UTF-8"%>

< %@page import!="java.awt.Image"%>
< %@page import!="java.awt.image.BufferedImage"%>
< %@page import!="java.io.File"%>

< %@page import!="javax.imageio.ImageIO"%>
< %@page import!="java.applet!.Applet!"%>
< %@page import!="java.awt.Button"%>
< %@page import!="java.awt.Graphics"%>
< %@page import!="java.awt.Image"%>
< %@page import!="java.awt.Rectangle"%>
< %@page import!="java.awt.TextArea"%>
< %@page import!="java.awt.event.ActionEvent"%>
< %@page import!="java.awt.event.ActionListener"%>
< %@page import!="java.awt.image.BufferedImage"%>
< %@page import!="java.awt.image.RenderedImage"%>
< %@page import!="java.io.DataInputStream"%>
< %@page import!="java.io.DataOutputStream"%>
< %@page import!="java.io.File"%>
< %@page import!="java.io.FileOutputStream"%>
< %@page import!="java.io.IOException"%>
< %@page import!="java.net.Socket"%>
< %@page import!="java.net.URL"%>

< %@page import!="javax.imageio.ImageIO"%>
< %@page import!="javax.imageio.ImageReader"%>
< %@page import!="javax.imageio.stream.ImageInputStream"%>
< %@page import!="javax.media.jai.JAI"%>
< %@page import!="javax.media.jai.ParameterBlockJAI"%>
< %@page import!="javax.media.jai.PlanarImage"%>

< %@page import!="com.sun.media.imageio.plugins.jpeg2000.J2KImageReadParam"%>

< % String jp2Path = "C:\\Temp\\temp\\154511004210f.jp2"; String jpgPath = "C:\\Temp\\temp\\154511004210f.jpg"; BufferedImage bi = null; try { bi = decode(jp2Path, jpgPath, "JPEG"); } catch (Exception e) { bi = ImageIO.read(new File("C:\\Temp\\noimage.jpg")); } response.setContentType("image/jpeg"); ImageIO.write(bi, "JPEG", response.getOutputStream()); %>

< %! public static BufferedImage decode(String source, String target, String encode) throws IOException { ImageInputStream in = ImageIO.createImageInputStream(new File(source)); ImageReader reader = ImageIO.getImageReaders(in).next(); reader.setInput(in); boolean workaround = true; J2KImageReadParam param = new J2KImageReadParam(); if (workaround) param.setResolution(5); // param.setSourceRegion(new Rectangle(0,0,reader.getWidth(0),reader.getHeight(0))); System.out.println("*******************************************************1"); BufferedImage image = reader.read(0, param); System.out.println("*******************************************************2"); FileOutputStream stream = new FileOutputStream(target); System.out.println("*******************************************************3"); JAI.create("encode", image, stream, encode, null); stream.flush(); stream.close(); return image; } public static void resize(String src, String target, int width, int height) throws IOException { BufferedImage biSrc = javax.imageio.ImageIO.read(new File(src)); if ( width < 1 && height < 1 ) { width = biSrc.getWidth(); height = biSrc.getHeight(); } else if ( width < 1 ) { width = (int)( (height / (float)biSrc.getHeight()) * biSrc.getWidth()); } else if ( height < 1 ) { height = (int)( (width / (float)biSrc.getWidth()) * biSrc.getHeight()) ; } Image targetImage = biSrc.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage biTarget = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); biTarget.createGraphics().drawImage(targetImage, 0, 0, null); FileOutputStream fos = new FileOutputStream(target); ImageIO.write(biTarget, "JPEG", fos); fos.close(); } %>

java trayicon

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;


public class TrayTest
{

private TrayIcon trayIcon;

public TrayTest()
{

if (SystemTray.isSupported()) {

Image image = Toolkit.getDefaultToolkit().getImage("c:/temp/0.jpg");

PopupMenu popup = new PopupMenu();
MenuItem defaultItem = new MenuItem("Exit");
defaultItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popup.add(defaultItem);

trayIcon = new TrayIcon(image, "notepad", popup);
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec("notepad.exe");
} catch (IOException e1) {
trayIcon.displayMessage("Action Event",
"notepad is not found !",
TrayIcon.MessageType.INFO);
}
}
});

try {
SystemTray.getSystemTray().add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}


} else {
System.err.println("System tray is currently not supported.");
}
}

public static void main(String[] args) throws Exception
{
new TrayTest();
}

}

applet tag

< applet! codebase = "../WEB-INF/classes/" code="ch.sample.worker.AppTest.class" archive="AppTest.jar" width=800 height="600">

signed applet

"C:\Program Files\Java\jdk1.6.0_13\bin\jar" cvf AppTest.jar ch/sample/worker/AppTest.class ch/sample/worker/ViewerClient.class

"C:\Program Files\Java\jdk1.6.0_13\bin\keytool" -keystore C:\temp\.keystore -genkey -dname "cn=test,ou=test o=test, c=KR" -alias TestSign -keypass 123456 -storepass 123456

"C:\Program Files\Java\jdk1.6.0_13\bin\jarsigner" -keystore C:\temp\.keystore -storepass 123456 -keypass 123456 AppTest.jar TestSign

java image resize

public static BufferedImage resizeImage(BufferedImage image, int width, int height) {


float w = new Float(width) ;
float h = new Float(height) ;

if ( w <= 0 && h <= 0 ) {
w = image.getWidth();
h = image.getHeight();
} else if ( w <= 0 ) {
w = image.getWidth() * ( h / image.getHeight() );
} else if ( h <= 0 ) {
h = image.getHeight() * ( w / image.getWidth() );
}

int wi = (int) w;
int he = (int) h;

BufferedImage resizedImage = new BufferedImage(wi,he,BufferedImage.TYPE_INT_RGB);

resizedImage.getGraphics().drawImage(
image.getScaledInstance(wi,he,Image.SCALE_AREA_AVERAGING),
0,0,wi,he,null
);

return resizedImage;

}

Html page to image file

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JEditorPane;
import javax.swing.SwingUtilities;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

import com.lowagie.text.FontFactory;
import com.lowagie.text.pdf.BaseFont;

public abstract class WebImage
{
static class Kit extends HTMLEditorKit
{
public Document createDefaultDocument() {
HTMLDocument doc = (HTMLDocument) super.createDefaultDocument();
doc.setTokenThreshold(Integer.MAX_VALUE);
doc.setAsynchronousLoadPriority(-1);

return doc;
}
}

public static BufferedImage create(String src, int width, int height) {

BufferedImage image = null;
JEditorPane pane = new JEditorPane();
Kit kit = new Kit();
pane.setEditorKit(kit);
pane.setEditable(false);
pane.setMargin(new Insets(0,20,0,20));
pane.setContentType("text/html; charset=UTF-8");
//pane.setFont(new Font("serif",Font.BOLD,20));

try {

System.out.println("-------------"+pane.getFont().getFamily());
System.out.println("-------------"+pane.getFont().getFontName());

pane.setPage(new URL(src));

System.out.println("-----------------------");
System.out.println(pane.getText());
System.out.println("-----------------------");

image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
Container c = new Container();
SwingUtilities.paintComponent(g, pane, c, 0, 0, width, height);
g.dispose();
} catch (Exception e) {
System.out.println(e);
}

return image;
}

public static void main ( String [] args ) {


// TODO Auto-generated method stub
//Call the Web page and convert to Image
BufferedImage ire;
String url="file:///C:\\temp\\test.html";
String path="c:\\temp\\tmp.jpg";
ire = WebImage.create(url, 800, 800);
//You can convert the BufferedImage to
//any format that you wish, jpg I thought was the best format
try{
ImageIO.write(ire, "PNG", new File(path));
System.out.println("complete");
}catch(IOException e){
e.printStackTrace();
}catch(NullPointerException e){
e.printStackTrace();
}catch(IllegalArgumentException e){
e.printStackTrace();
}
}



}

log4j.properties sample

log4j.rootLogger = DEBUG, stdout



log4j.logger.ViewerServer=DEBUG, viewer
log4j.logger.ImageServer=DEBUG, image
log4j.logger.ScanServer=DEBUG, scan
log4j.logger.EaiServer=DEBUG, eai



log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%n



log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = log/demon.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n



log4j.appender.viewer.Threshold = DEBUG
log4j.appender.viewer = org.apache.log4j.DailyRollingFileAppender
log4j.appender.viewer.File = log/demon1.log
log4j.appender.viewer.layout = org.apache.log4j.PatternLayout
log4j.appender.viewer.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n



log4j.appender.image.Threshold = DEBUG
log4j.appender.image = org.apache.log4j.DailyRollingFileAppender
log4j.appender.image.File = log/demon2.log
log4j.appender.image.layout = org.apache.log4j.PatternLayout
log4j.appender.image.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n



log4j.appender.scan.Threshold = DEBUG
log4j.appender.scan = org.apache.log4j.DailyRollingFileAppender
log4j.appender.scan.File = log/demon3.log
log4j.appender.scan.layout = org.apache.log4j.PatternLayout
log4j.appender.scan.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n



log4j.appender.eai.Threshold = DEBUG
log4j.appender.eai = org.apache.log4j.DailyRollingFileAppender
log4j.appender.eai.File = log/demon4.log
log4j.appender.eai.layout = org.apache.log4j.PatternLayout
log4j.appender.eai.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

Runtime.getRuntime

String [] _cmd1 = { "/bin/sh","-c","pax -r -s ',^,"+destDir+",' -f " + tarFileName };

//String [] _cmd1 = { "cmd","/c","pax -r -s ',^,"+destDir+",' -f " + tarFileName };

String cmd1 = execCommand ( _cmd1 );



public String execCommand(String [] cmd) throws IOException , InterruptedException {

Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();

if (p.exitValue() != 0) {
BufferedReader err = new BufferedReader (new InputStreamReader(p.getErrorStream()));
while (err.ready())
log.info("ERR" + err.readLine());
err.close();
} else {
BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream()));
while (out.ready())
log.info("OK" + out.readLine());
out.close();
}

p.destroy();


return "";
}

java Regular Expression

java.util.regex.Pattern p = java.util.regex.Pattern.compile("[ ]+$");
java.util.regex.Matcher m = p.matcher(s);
String r = m.replaceAll("");

java scheduler

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Properties;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;

public class BatchScheduler {

public ScheduledThreadPoolExecutor sch ;

public BatchScheduler() {
super();
sch = new ScheduledThreadPoolExecutor(2);
}

public void start() throws FileNotFoundException, IOException {

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd", new Locale("KOREAN", "KOREA"));
String jobDate = formatter.format(new Date());

// from 0 second , interval 10 second
sch.scheduleAtFixedRate(new SendImage(jobDate), 0, 10, TimeUnit.SECONDS);
sch.scheduleAtFixedRate(new DeleteImage(jobDate), 0, 10, TimeUnit.SECONDS);

}

public void stop() {
sch.shutdown();
}

public static void main(String[] args) {
BatchScheduler t = new BatchScheduler();
try {
t.start();
} catch ( Exception e ) {
e.printStackTrace();
}
}

}