I can confirm that my testing on the GAE/J dev app server has revealed
that its images service can process formats as follows:

  JPG:  Yes
  PNG:  Yes
  GIF:  Yes
  ICO:  No
  TIFF: No
  BMP:  Yes.

Would Google consider updating their images service documentation?

Regards,

Ian Marshall


On Dec 17, 3:43 pm, Ian Marshall <ianmarshall...@gmail.com> wrote:
> I see a post from Nick Johnson of Google on StackOverflow.com dated
> 6th July 2010 about plug-ins. He said:
>
>   "You're trying to work with 'ico' and 'tif' images. Neither of these
> are supported on App Engine - only JPG, PNG and GIF."
>
> The GAE/J documentation "Images Java API Overview" at:
>
>  http://code.google.com/intl/en/appengine/docs/java/images/overview.ht...
>
> states that:
>
>   "The service accepts image data in the JPEG, PNG, GIF (including
> animated GIF), BMP, TIFF and ICO formats."
>
> Does this GAE/J documentation need to be corrected?
>
> On Dec 17, 7:35 am, Ian Marshall <ianmarshall...@gmail.com> wrote:
>
> > No ideas, anyone?
>
> > On Dec 16, 11:59 am, Ian Marshall <ianmarshall...@gmail.com> wrote:
>
> > > I refer to the related post entitled "WARNING: No image reader found
> > > for format "ico". An ImageIO plugin must be installed to use this
> > > format with the DevAppServer." dated 7th June 2009 at:
>
> > >http://groups.google.com/group/google-appengine-java/browse_thread/th...
>
> > > where a query about the dev app server warnings below was raised, but
> > > after Jason of Google asked a supplementary question he received no
> > > response from the original poster.
>
> > > My web app uploads an image file from a web browser user and then, if
> > > the file is larger than around 900kB I use the GAE/J ImagesService to
> > > reduce the image data size to this level. An extract of my relevant
> > > code is:
>
> > >         byte[] baImageSource = [...];    // Data from an uploaded image 
> > > file
> > >         int nNewWidth  = [...];          // Calculate correct shrinkage
> > >         int nNewHeight = [...];          // Calculate correct shrinkage
>
> > >         Image imgSource = ImagesServiceFactory.makeImage(baImageSource);
> > >         ImagesService isService = ImagesServiceFactory.getImagesService();
> > >         Transform tfrm = ImagesServiceFactory.makeResize(nNewWidth,
> > > nNewHeight);
> > >         Image imgNew = isService.applyTransform(tfrm, imgSource);
> > >         byte[] baResult = imgNew.getImageData();    // The shrunken image
> > > data
>
> > > When I run my ImagesService code on my GAE/J development server
> > > ((latest) version 1.4.0) I get the two warnings:
>
> > >         16-Dec-2010 10:40:18
> > > com.google.appengine.api.images.dev.LocalImagesService init
> > >         WARNING: No image reader found for format "ico". An ImageIO plugin
> > > must be installed to use this format with the DevAppServer.
>
> > >         16-Dec-2010 10:40:18
> > > com.google.appengine.api.images.dev.LocalImagesService init
> > >         WARNING: No image reader found for format "tif". An ImageIO plugin
> > > must be installed to use this format with the DevAppServer.
>
> > > My code runs well for shrinking .jpg files, but when I try this for
> > > a .tif file of size 6.11 MB I get an IllegalArgumentException on my
> > > call to ImagesService.applyTransform(...). (I set out a stack trace at
> > > the foot of this post.)
>
> > > I have a few questions for those interested:
>
> > >   ·  How do I get a "tif" ImageIO plug-in for the ImagesService ()?
> > >   ·  Should this plug-in be supplied with the GAE/J SDK in future
> > > releases?
> > >   ·  Does this issue apply to the dev app server only (I have not yet
> > > deployed this to production)?
>
> > > Cheers,
>
> > > Ian Marshall
>
> > > STACK TRACE WHEN TRANSFORMING A .TIF FILE
> > > -----------------------------------------
> > > java.lang.IllegalArgumentException: Failed to read image
> > > at
> > > com.google.appengine.api.images.ImagesServiceImpl.convertApplicationException(ImagesServiceImpl.java:
> > > 301)
> > > at
> > > com.google.appengine.api.images.ImagesServiceImpl.applyTransform(ImagesServiceImpl.java:
> > > 73)
> > > at
> > > com.google.appengine.api.images.ImagesServiceImpl.applyTransform(ImagesServiceImpl.java:
> > > 50)
> > > at
> > > com.google.appengine.api.images.ImagesServiceImpl.applyTransform(ImagesServiceImpl.java:
> > > 39)
> > > at [my package
> > > path].business.MiscellaneousBusiness.compressImage(MiscellaneousBusiness.java:
> > > 311)
> > > at [my package
> > > path].business.MiscellaneousBusiness.compressImage(MiscellaneousBusiness.java:
> > > 236)
> > > at [my package path].wicket.stuff.MyPage$5.onSubmit(MyPage.java:1348)
> > > at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:
> > > 1561)
> > > at org.apache.wicket.markup.html.form.Form.process(Form.java:958)
> > > at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:
> > > 920)
> > > at java.lang.reflect.Method.invoke(Unknown Source)
> > > at
> > > com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:
> > > 100)
> > > at
> > > org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:
> > > 182)
> > > at
> > > org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:
> > > 73)
> > > at
> > > org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:
> > > 92)
> > > at
> > > org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:
> > > 1250)
> > > at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
> > > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
> > > at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
> > > at
> > > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:
> > > 486)
> > > at
> > > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:
> > > 319)
> > > at org.mortbay.jetty.servlet.ServletHandler
> > > $CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> > > com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
> > > 58)
> > > at org.mortbay.jetty.servlet.ServletHandler
> > > $CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> > > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
> > > 43)
> > > at org.mortbay.jetty.servlet.ServletHandler
> > > $CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> > > com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:
> > > 122)
> > > at org.mortbay.jetty.servlet.ServletHandler
> > > $CachedChain.doFilter(ServletHandler.java:1157)
> > > at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
> > > 388)
> > > at
> > > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
> > > 216)
> > > at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
> > > 182)
> > > at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
> > > 765)
> > > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
> > > 418)
> > > at
> > > com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
> > > 70)
> > > at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
> > > 152)
> > > at com.google.appengine.tools.development.JettyContainerService
> > > $ApiProxyHandler.handle(JettyContainerService.java:349)
> > > at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
> > > 152)
> > > at org.mortbay.jetty.Server.handle(Server.java:326)
> > > at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
> > > 542)
> > > at org.mortbay.jetty.HttpConnection
> > > $RequestHandler.content(HttpConnection.java:938)
> > > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
> > > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
> > > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> > > at
> > > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
> > > 409)
> > > at org.mortbay.thread.QueuedThreadPool
> > > $PoolThread.run(QueuedThreadPool.java:582)
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to