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/thread/7a44035eea5b1f4d/5fcd8b0a21f41db3?lnk=gst&q=WARNING%3A+No+image+reader+found+for+format+%22ico%22.+An+ImageIO+plugin+must+be+installed+to+use+this+format+with+the+DevAppServer#5fcd8b0a21f41db3 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.