Uploaded image for project: 'Imaging'
  1. Imaging
  2. MGNLIMG-209

Support webp images

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Done
    • Icon: Neutral Neutral
    • 3.5.0
    • 3.3.2, 3.4.1
    • None
    • None
    • Yes

      WebP is an image format employing both lossy[6] and lossless compression. It is currently developed by Google, based on technology acquired with the purchase of On2 Technologies.

      – wikipedia

      WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index.

      Lossless WebP supports transparency (also known as alpha channel) at a cost of just 22% additional bytes. For cases when lossy RGB compression is acceptable, lossy WebP also supports transparency, typically providing 3× smaller file sizes compared to PNG.

      – https://developers.google.com/speed/webp/

      Currently we had this issue when uploading a webp image:

      errorlog
      SEVERE: Servlet.service() for servlet [default] in context with path [/mgnlwebapp55] threw exception
       com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException: info.magnolia.imaging.ImagingException: Could not load image for info.magnolia.imaging.parameters.BinaryNodeParameterProvider@6758e62e
       at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2218)
       at com.google.common.cache.LocalCache.get(LocalCache.java:4147)
       at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4151)
       at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5140)
       at info.magnolia.imaging.caching.CachingImageStreamer.serveImage(CachingImageStreamer.java:148)
       at info.magnolia.imaging.Imaging.generate(Imaging.java:76)
       at info.magnolia.imaging.ImagingServlet.doGet(ImagingServlet.java:87)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
       at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.virtualuri.VirtualUriFilter.doFilter(VirtualUriFilter.java:98)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58)
       at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:67)
       at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:220)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:89)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:77)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.multisite.filters.CrossSiteSecurityFilter.doFilter(CrossSiteSecurityFilter.java:104)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84)
       at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94)
       at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.multisite.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:120)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:127)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:64)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:111)
       at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.personalization.preview.filter.PreviewFilter.doFilter(PreviewFilter.java:92)
       at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81)
       at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79)
       at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
       at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85)
       at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107)
       at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67)
       at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110)
       at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
       at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
       at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
       at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:412)
       at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
       at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
       at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1385)
       at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
       at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
       at java.base/java.lang.Thread.run(Thread.java:844)
       Caused by: java.lang.RuntimeException: info.magnolia.imaging.ImagingException: Could not load image for info.magnolia.imaging.parameters.BinaryNodeParameterProvider@6758e62e
       at info.magnolia.imaging.caching.CachingImageStreamer$1.load(CachingImageStreamer.java:135)
       at info.magnolia.imaging.caching.CachingImageStreamer$1.load(CachingImageStreamer.java:127)
       at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3708)
       at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2416)
       at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2299)
       at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2212)
       ... 104 more
       Caused by: info.magnolia.imaging.ImagingException: Could not load image for info.magnolia.imaging.parameters.BinaryNodeParameterProvider@6758e62e
       at info.magnolia.imaging.operations.load.AbstractLoader.apply(AbstractLoader.java:74)
       at info.magnolia.imaging.operations.ImageOperationChain.apply(ImageOperationChain.java:81)
       at info.magnolia.imaging.operations.ImageOperationChain.generate(ImageOperationChain.java:74)
       at info.magnolia.imaging.DefaultImageStreamer.serveImage(DefaultImageStreamer.java:61)
       at info.magnolia.imaging.caching.CachingImageStreamer.generateAndStore(CachingImageStreamer.java:226)
       at info.magnolia.imaging.caching.CachingImageStreamer$1.load(CachingImageStreamer.java:132)
       ... 109 more
      
      

        Acceptance criteria

              had Jan Haderka
              viet.nguyen Viet Nguyen
              Votes:
              3 Vote for this issue
              Watchers:
              11 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Task DoD

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Time Spent - 0.75d Remaining Estimate - 0.25d
                    0.25d
                    Logged:
                    Time Spent - 0.75d Remaining Estimate - 0.25d
                    0.75d