Note that there are some explanatory texts on larger screens.

plurals
  1. POInvert image after streaming from url is not working in servlet java
    primarykey
    data
    text
    <p>I want to invert image after image get streamed from given url in servlet, but its not working. But it giving me same image as it is when i send parameter invert=true in url to this servlet and giving me exception <strong>NullPointerException</strong> at below line. </p> <p><code>for (int y = 0; y &lt; bImageFromConvert.getHeight(); y++) {</code></p> <p>Let me know where I am doing mistake. Please point me below is correct way to do invert thing, if not please show me way to make it work.</p> <p>Here is code of servlet:</p> <pre><code>import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import org.apache.log4j.Logger; import java.io.ByteArrayInputStream; public class TestImage extends HttpServlet{ /* *Initialize the Logger. */ private static Logger log = Logger.getLogger(TestImage.class); @Override public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ String imageURL="http://&lt;host_name&gt;/getimage"; //removed actual url String invert = request.getParameter("invert"); InputStream resultInStream = null; //Gets the response's outputStream instance to write a image in the response. OutputStream resultOutStream = response.getOutputStream(); try{ //Initialize the URL for the requested image. URL imageUrl = new URL(imageURL); //opens the inputStream of the URL. resultInStream = imageUrl.openStream(); //Initialize the byte array object to read and hold the bytes form the image URL stream. byte[] buffer = new byte[4096]; int bytes_read; //writes the image bytes into the response's output stream. while((bytes_read=resultInStream.read(buffer)) != -1){ resultOutStream.write(buffer, 0, bytes_read); } InputStream in = new ByteArrayInputStream(buffer); BufferedImage bImageFromConvert = ImageIO.read(in); /** * Code to invert image fetched from url */ if(invert != "true"){ for (int x = 0; x &lt; bImageFromConvert.getWidth(); x++) { for (int y = 0; y &lt; bImageFromConvert.getHeight(); y++) { int rgba = bImageFromConvert.getRGB(x, y); Color col = new Color(rgba, true); col = new Color(255 - col.getRed(), 255 - col.getGreen(), 255 - col.getBlue()); bImageFromConvert.setRGB(x, y, col.getRGB()); } } } //Closing all the input and output streams. bImageFromConvert.flush(); in.close(); resultOutStream.close(); resultInStream.close(); } catch (Exception e) { log.error("Unable to read and write the image",e); } } } </code></pre> <p>[Solved] Fixed code:</p> <pre><code>import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import org.apache.log4j.Logger; import java.io.ByteArrayInputStream; public class TestImage extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; /* * Initialize the Logger. */ private static Logger log = Logger.getLogger(TestImage.class); @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imageURL="http://&lt;host_name&gt;/getimage"; //removed actual url // Sets the response content type to jpg image. String invert = request.getParameter("invert"); InputStream resultInStream = null; // Gets the response's outputStream instance to write a image in the // response. OutputStream resultOutStream = response.getOutputStream(); BufferedImage bImageFromConvert = null; try { // Initialize the URL for the requested image. URL imageUrl = new URL(imageURL); // opens the inputStream of the URL. if (object!=null &amp;&amp; !object.equalsIgnoreCase("")) { resultInStream = imageUrl.openStream(); if("true".equals(invert)){ /** * Code to invert image fetched from url */ bImageFromConvert = ImageIO.read(resultInStream); for (int x = 0; x &lt; bImageFromConvert.getWidth(); x++) { for (int y = 0; y &lt; bImageFromConvert.getHeight(); y++) { int rgba = bImageFromConvert.getRGB(x, y); Color col = new Color(rgba, true); col = new Color(255 - col.getRed(), 255 - col.getGreen(), 255 - col.getBlue()); bImageFromConvert.setRGB(x, y, col.getRGB()); } } ImageIO.write(bImageFromConvert, "JPG", resultOutStream); }else{ // Initialize the byte array object to read and hold the bytes form // the image URL stream. byte[] buffer = new byte[4096]; int bytes_read; // writes the image bytes into the response's output stream. while ((bytes_read = resultInStream.read(buffer)) != -1) { resultOutStream.write(buffer, 0, bytes_read); } } // Closing all the input and output streams. } resultOutStream.flush(); } catch (Exception e) { log.error("Unable to read and write the image", e); } finally { if (resultOutStream != null) { try { resultOutStream.close(); } catch (Exception ignore) { } } if (resultInStream != null) { try { resultInStream.close(); } catch (Exception ignore) { } } } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload