[MGNLIMG-89] BMP file types are not being displayed as images on a page Created: 24/Oct/11  Updated: 23/Dec/11  Resolved: 14/Dec/11

Status: Closed
Project: Imaging
Component/s: None
Affects Version/s: None
Fix Version/s: 2.1.1

Type: Bug Priority: Major
Reporter: Rory Gibson Assignee: Ondrej Chytil
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File MGNLIMG-89.patch    
Issue Links:
Cloners
is cloned by MGNLETK-67 CLONE -BMP file types are not being d... Closed
relation
is related to MGNLETK-35 imaging: produce images of the same t... Closed
supersession
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Date of First Response:

 Description   

A paragraph of text has been created that features a .bmp image file. Currently this type of image is not being displayed on the page and instead the user is being shown 'image' text indicating that an incorrect file type is being used.

Steps to reproduce:

Its expected that the .bmp image is shown on the page as this is a valid image file type. Instead the 'image' alt text is displayed indicating that an incorrect file type is used.



 Comments   
Comment by Magnolia International [ 10/Nov/11 ]

Rory,

I suspect this is actually limited by the imaging module at the moment. I'd have to check... but perhaps you have a stacktrace that would give us some hints ?

Comment by Rory Gibson [ 17/Nov/11 ]
java.lang.RuntimeException: java.lang.IllegalStateException: Unexpected and unhandled exception: Can't find ImageWriter for bmp
        at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:159)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:60)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:75)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.module.extendedtemplatingkit.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:94)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:64)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:88)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:60)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at com.technophobia.magnolia.filters.RequestParameterFettlingFilter.doFilter(RequestParameterFettlingFilter.java:54)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at com.technophobia.magnolia.filters.AbstractAuditFilter.doFilter(AbstractAuditFilter.java:48)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at com.technophobia.magnolia.filters.AbstractAuditFilter.doFilter(AbstractAuditFilter.java:48)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:85)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:51)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:86)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:60)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:102)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:120)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:66)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:105)
        at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:216)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalStateException: Unexpected and unhandled exception: Can't find ImageWriter for bmp
        at info.magnolia.imaging.caching.CachingImageStreamer.unwrapRuntimeException(CachingImageStreamer.java:217)
        at info.magnolia.imaging.caching.CachingImageStreamer.unwrapRuntimeException(CachingImageStreamer.java:214)
        at info.magnolia.imaging.caching.CachingImageStreamer.serveImage(CachingImageStreamer.java:116)
        at info.magnolia.imaging.ImagingServlet.doGet(ImagingServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:119)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84)
        at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:66)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:69)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:88)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
        at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:57)
        at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:65)
        at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:147)
        ... 57 more
Caused by: java.lang.IllegalStateException: Can't find ImageWriter for bmp
        at info.magnolia.imaging.DefaultImageStreamer.write(DefaultImageStreamer.java:58)
        at info.magnolia.imaging.DefaultImageStreamer.serveImage(DefaultImageStreamer.java:49)
        at info.magnolia.imaging.caching.CachingImageStreamer.generateAndStore(CachingImageStreamer.java:171)
        at info.magnolia.imaging.caching.CachingImageStreamer$1.apply(CachingImageStreamer.java:96)
        at info.magnolia.imaging.caching.CachingImageStreamer$1.apply(CachingImageStreamer.java:93)
        at com.google.common.collect.MapMaker$StrategyImpl.compute(MapMaker.java:592)
        at com.google.common.collect.MapMaker$StrategyImpl.compute(MapMaker.java:462)
        at com.google.common.collect.CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2045)
        at info.magnolia.imaging.caching.CachingImageStreamer.serveImage(CachingImageStreamer.java:113)
        ... 75 more



Comment by Rory Gibson [ 17/Nov/11 ]

Sorry, duplicated comment removed.
Please see stacktrace in previous comment

Comment by Rory Gibson [ 17/Nov/11 ]

Further investigation indicates this is caused by line 56 of DefaultImageStreamer failing to load any ImageWriters for the format and ImageTypeSpecifier; looks like the BufferedImage conatins a Raster, which contains a SampleModel, and the numBands in the SampleModel (4) is incompatible with the BMP image writer supplied by Sun.

Still investigating.

Comment by Magnolia International [ 01/Dec/11 ]

Rory, just out of curiosity: do you actually want to output BMPs ? I can see how it's useful to be able to use ~anything as input (i.e no need for editors to know what formats are supported or how to convert), but in terms of output, if we're targeting the web, is there any use to anything else than gif, jpeg and png ?

Comment by Rory Gibson [ 01/Dec/11 ]

Hi Grégory
You're quite right; I'd much rather that these images be output as GIFs, JPGs or PNGs.
I've tried a few ways of doing this, and can't see anything that works; do you know how to force it?

Comment by Magnolia International [ 02/Dec/11 ]

Can't recall the details on top of my head, but I think the ETK/STK integration does something to the output format so that it matches the input. In Imaging's "standalone" configuration, you can specify the output format. I'd imagine the two approaches would be combinable in a "web-friendly" one, where input format would be used for gif/jpeg/png, and we'd fallback to a default (png?) for other input formats.

Comment by Jan Haderka [ 13/Dec/11 ]

I believe you are referring to MGNLETK-35

Generated at Mon Feb 12 02:12:10 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.