Installing mod_proxy_html

January 5th, 2008No Comments  |  

Download mod_proxy_html.c from here (please remember to register if you use this software).
Compile it like so

apxs -a -c -I/usr/include/libxml2 -i mod_proxy_html.c

Create a file /etc/httpd/conf.d/mod_proxy_html.conf

LoadFile /usr/lib/libxml2.so
LoadModule proxy_html_module /usr/lib/httpd/modules/mod_proxy_html.so
ProxyHTMLExtended On
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

/**
* Thumbnail.java (requires Java 1.2+)
* Load an image, scale it down and save it as a JPEG file.
* @author Marco Schmidt
*/
public class Thumbnail {
public static void main(String[] args) throws Exception {
if (args.length != 5) {
System.err.println("Usage: java Thumbnail INFILE " +
"OUTFILE WIDTH HEIGHT QUALITY");
System.exit(1);
}
// load image from INFILE
Image image = Toolkit.getDefaultToolkit().getImage(args[0]);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = Integer.parseInt(args[2]);
int thumbHeight = Integer.parseInt(args[3]);
double thumbRatio = (double)thumbWidth / (double)thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double)imageWidth / (double)imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int)(thumbWidth / imageRatio);
} else {
thumbWidth = (int)(thumbHeight * imageRatio);
}
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly
BufferedImage thumbImage = new BufferedImage(thumbWidth,
thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
BufferedOutputStream out = new BufferedOutputStream(new
FileOutputStream(args[1]));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.
getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt(args[4]);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float)quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
System.out.println("Done.");
System.exit(0);
}
}

Basic JPEG image resizing in Java

January 1st, 2008No Comments  |  

/* JpegResizerDemo.java */

import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;

import java.util.Map;
import java.util.HashMap;

import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
* @author CyranoVR
*/
public class ImageResizer {

public static void main(String args[]) {

if (args.length != 3) {
System.out.println("Usage: ImageResizer <input> <output>
<scale>");
System.exit(0);
}

String inFile = args[0];
String outFile = args[1];

FileInputStream fs = null;

try {

float scale = Float.parseFloat(args[2]);

fs = new FileInputStream(inFile);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fs);
BufferedImage srcImg = decoder.decodeAsBufferedImage();
fs.close();

AffineTransform af =
AffineTransform.getScaleInstance(scale, scale );

Map hints = new HashMap();
hints.put(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
RenderingHints rh = new RenderingHints(hints);

AffineTransformOp transform = new AffineTransformOp(af,rh);

BufferedImage destImg =
transform.createCompatibleDestImage(srcImg, srcImg.getColorModel());
transform.filter(srcImg, destImg);

FileOutputStream out = new FileOutputStream(outFile);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out,
JPEGCodec.getDefaultJPEGEncodeParam(destImg));

encoder.encode(destImg);
out.close();
System.out.println("Saved file " + outFile);

} catch (FileNotFoundException fnfe ) {
System.out.println("File " + inFile + " does not exist!");

} catch (NumberFormatException nfe){
System.out.println("You entered " + args[2] + ". Please
enter a decimal expression.");

} catch (IOException ioe) {
System.out.println("IO Exception: " + ioe.getMessage());

} catch (ImageFormatException ife) {
System.out.println("Image Format Excpetion: Could not
decode " + inFile);

} catch (Exception e) {
System.out.println(e.getMessage());

} finally {
try {
if(fs != null)
fs.close();
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
}

Just like you would identify any other character in a string: look for “\r\n” or “\n” (system dependent).