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.