Jpeg encoder exception: Trying to make a thumbail from a jpeg imagein a byte[]

Discussion in 'Java' started by Ivan Alameda Carballo, Aug 26, 2007.

  1. Hi:

    I have a web application in asp.net wich I am rewriting to Java. Is
    about uploading pictures online. Web system upload perfectly
    pictures, but in original size. I would like to upload too a thumbail
    version of the big picture. For that, I am using Jpegencoder from
    sun, and seems I am doing something bad, coz when I am trying to do
    that I get a exception: "nof a jpeg file: start " and so on...

    I get the file data from a fileupload (apache commons fileupload), and
    since I get the byte array of each picture I save it into a bussiness
    object.

    The complete code is in here, just in case someone of you could help
    me. I am getting extressed coz dont know what coulb be wrong, if
    somone of you could help it will be more than great!. Thank you for
    your help!

    /*
    * uploadPictures.java
    *
    * Created on August 19, 2007, 10:38 PM
    */

    package servlets;

    import java.awt.Graphics2D;
    import java.io.*;
    import java.net.*;
    import javax.media.jai.JAI;

    import javax.servlet.*;
    import javax.servlet.http.*;

    import java.util.Iterator;
    import org.apache.commons.fileupload.DiskFileUpload;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;

    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import javax.imageio.ImageIO;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageDecoder;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    import java.awt.Graphics2D;
    import java.io.BufferedOutputStream;

    import lovaspillando.business.Photo;

    /**
    *
    * @author lovaspillando
    * @version
    */
    public class uploadPictures extends HttpServlet {

    /** Processes requests for both HTTP <code>GET</code> and
    <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
    protected void processRequest(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    boolean isMultiPart;
    isMultiPart = ServletFileUpload.isMultipartContent(request);

    DiskFileUpload fu = new DiskFileUpload();
    fu.setSizeMax(10240*512);
    fu.setSizeThreshold(40960);
    fu.setRepositoryPath("/tmp");
    try {
    Iterator i = fu.parseRequest(request).iterator();
    FileItem actual = null;

    while (i.hasNext()){
    actual = (FileItem)i.next();
    String fname = actual.getName();
    Photo oPhoto = new Photo();
    oPhoto.setDesPhoto("sticked title");
    oPhoto.setBytesOriginal(actual.get());

    //creating the bufferedImage from a JPEG stream
    InputStream in = new
    ByteArrayInputStream(actual.get());
    JPEGImageDecoder decoder =
    JPEGCodec.createJPEGDecoder(in);
    BufferedImage image = decoder.decodeAsBufferedImage();
    in.close();

    //preparing thumbail numbers
    int thumbWidth = 150;
    int thumbHeight = 150;
    double thumbRatio = (double)thumbWidth /
    (double)thumbHeight; //ratio for the thumbail

    // obtain the picture width and height
    int imageWidth = image.getWidth(null);
    int imageHeight = image.getHeight(null);

    //it will works if the size of image is bigger than thumbail details
    if (imageWidth > 150 || imageHeight > 150) {
    double imageRatio = (double)imageWidth /
    (double)imageHeight; //ratio in the original image
    if (thumbRatio < imageRatio) {
    thumbHeight = (int)(thumbWidth / imageRatio);
    } else {
    thumbWidth = (int)(thumbHeight * imageRatio);
    }

    // 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(java.awt.RenderingHints.KEY_INTERPOLATION,
    java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    graphics2D.drawImage(image, 0, 0, thumbWidth,
    thumbHeight, null);

    try {
    ByteArrayOutputStream sout = new
    ByteArrayOutputStream();
    JPEGImageEncoder encoder =
    JPEGCodec.createJPEGEncoder(sout);
    JPEGEncodeParam param =
    encoder.getDefaultJPEGEncodeParam(thumbImage);

    int quality = Math.max(0, Math.min(650,
    100));
    param.setQuality((float)quality / 100.0f,
    false);
    encoder.setJPEGEncodeParam(param);
    encoder.encode(thumbImage, param);
    oPhoto.setBytesThumb(sout.toByteArray());
    sout.close();
    } catch (java.io.IOException ioe) {
    ioe.printStackTrace();
    }
    } // end if image width or height
    oPhoto.setBytesThumb(actual.get());
    oPhoto.setAlbumID(1);
    if(oPhoto.getBytesOriginal().length > 1) {
    oPhoto.add();
    }
    }
    } catch (FileUploadException exception) {

    }
    out.close();
    }
    Ivan Alameda Carballo, Aug 26, 2007
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. aaaaaaaaaaaa

    jpeg encoder

    aaaaaaaaaaaa, Nov 1, 2003, in forum: Java
    Replies:
    1
    Views:
    2,933
    Marco Schmidt
    Nov 2, 2003
  2. Patrick
    Replies:
    1
    Views:
    720
  3. lovaspillando
    Replies:
    0
    Views:
    1,016
    lovaspillando
    Aug 26, 2007
  4. Joshua Cranmer
    Replies:
    0
    Views:
    419
    Joshua Cranmer
    Aug 26, 2007
  5. dk
    Replies:
    6
    Views:
    8,919
    Roedy Green
    Jan 22, 2010
Loading...

Share This Page