Ralph Daugherty skrev:
Hi Thorbjørn, I am already doing what you are suggesting. The class I started with is (as I posted back aways) org.apache.myfaces.custom.captcha.util and I am bringing in supporting classes for generating a PNG text image twisted based on this. It is Apache's robust CAPTCHA logic, unmodified.
Hi.

Please find below a proof-of-concept stand alone class that generates a PNG image. You need tomahawk.jar, the batik.jars and servlet.jar on the classpath. The DummyHttpServletResposeImplementation nested class is needed to wrap the overridden outputStream.

Regards,

/Thorbjørn

foo/Bar.java
====
package foo;

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.myfaces.custom.captcha.util.CAPTCHAImageGenerator;
import org.apache.myfaces.custom.captcha.util.CAPTCHATextGenerator;

public class Bar {

private static class DummyHttpServletResponseImplementation implements
HttpServletResponse {
public void setContentType(String arg0) {
}

public void setContentLength(int arg0) {
}

public PrintWriter getWriter() throws IOException {
return null;
}

public ServletOutputStream getOutputStream() throws IOException {
return null;
}

public String getCharacterEncoding() {
return null;
}

public void setStatus(int arg0, String arg1) {
}

public void setStatus(int arg0) {
}

public void setIntHeader(String arg0, int arg1) {
}

public void setHeader(String arg0, String arg1) {
}

public void setDateHeader(String arg0, long arg1) {
}

public void sendRedirect(String arg0) throws IOException {
}

public void sendError(int arg0, String arg1) throws IOException {
}

public void sendError(int arg0) throws IOException {
}

public String encodeUrl(String arg0) {
return null;
}

public String encodeURL(String arg0) {
return null;
}

public String encodeRedirectUrl(String arg0) {
return null;
}

public String encodeRedirectURL(String arg0) {
return null;
}

public boolean containsHeader(String arg0) {
return false;
}

public void addCookie(Cookie arg0) {
}
}

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
CAPTCHAImageGenerator generator = new CAPTCHAImageGenerator();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
HttpServletResponse response = new DummyHttpServletResponseImplementation() {

ServletOutputStream sos = new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
baos.write(b);
}
};

@Override
public ServletOutputStream getOutputStream() throws IOException {
return sos;
}
};
Color[] colors = new Color[] {Color.RED, Color.GREEN, Color.PINK, Color.ORANGE, Color.CYAN};
Color startingColor = colors[(int) (Math.random() * colors.length)];
Color endingColor = colors[(int) (Math.random() * colors.length)];
generator.generateImage(response, CAPTCHATextGenerator.generateRandomText(), startingColor, endingColor);
System.out.println("PNG image in baos is " + baos.size() + " bytes");
File f = new File("out.png");
FileOutputStream fos = new FileOutputStream(f);
fos.write(baos.toByteArray());
fos.close();
}

}

====


package foo;

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.myfaces.custom.captcha.util.CAPTCHAImageGenerator;
import org.apache.myfaces.custom.captcha.util.CAPTCHATextGenerator;

public class Bar {

private static class DummyHttpServletResponseImplementation implements
HttpServletResponse {
public void setContentType(String arg0) {
}

public void setContentLength(int arg0) {
}

public PrintWriter getWriter() throws IOException {
return null;
}

public ServletOutputStream getOutputStream() throws IOException {
return null;
}

public String getCharacterEncoding() {
return null;
}

public void setStatus(int arg0, String arg1) {
}

public void setStatus(int arg0) {
}

public void setIntHeader(String arg0, int arg1) {
}

public void setHeader(String arg0, String arg1) {
}

public void setDateHeader(String arg0, long arg1) {
}

public void sendRedirect(String arg0) throws IOException {
}

public void sendError(int arg0, String arg1) throws IOException {
}

public void sendError(int arg0) throws IOException {
}

public String encodeUrl(String arg0) {
return null;
}

public String encodeURL(String arg0) {
return null;
}

public String encodeRedirectUrl(String arg0) {
return null;
}

public String encodeRedirectURL(String arg0) {
return null;
}

public boolean containsHeader(String arg0) {
return false;
}

public void addCookie(Cookie arg0) {
}
}

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
CAPTCHAImageGenerator generator = new CAPTCHAImageGenerator();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
HttpServletResponse response = new DummyHttpServletResponseImplementation() {

ServletOutputStream sos = new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
baos.write(b);
}
};

@Override
public ServletOutputStream getOutputStream() throws IOException {
return sos;
}
};
Color[] colors = new Color[] {Color.RED, Color.GREEN, Color.PINK, Color.ORANGE, Color.CYAN};

Color startingColor = colors[(int) (Math.random() * colors.length)];
Color endingColor = colors[(int) (Math.random() * colors.length)];
generator.generateImage(response, CAPTCHATextGenerator.generateRandomText(), startingColor, endingColor);
System.out.println("PNG image in baos is " + baos.size() + " bytes");
File f = new File("out.png");
FileOutputStream fos = new FileOutputStream(f);
fos.write(baos.toByteArray());
fos.close();
}

}

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.