Bug 57361 - [PATCH] Cropping background images.
Summary: [PATCH] Cropping background images.
Status: RESOLVED WONTFIX
Alias: None
Product: POI
Classification: Unclassified
Component: XSLF (show other bugs)
Version: 3.10-FINAL
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords: PatchAvailable
Depends on:
Blocks:
 
Reported: 2014-12-17 07:59 UTC by artyom.nikiforov
Modified: 2016-03-24 00:11 UTC (History)
0 users



Attachments
patch + samples of cropping the background images. (464.29 KB, application/zip)
2014-12-17 07:59 UTC, artyom.nikiforov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description artyom.nikiforov 2014-12-17 07:59:35 UTC
Created attachment 32299 [details]
patch + samples of cropping the background images.

Hi, folks!
I'm trying to convert pptx slides to images with the code:
        FileInputStream is = new FileInputStream("slideshow.pptx");
        XMLSlideShow ppt = new XMLSlideShow(is);
        is.close();
        
        Dimension pgsize = ppt.getPageSize();

        Slide[] slide = ppt.getSlides();
        for (int i = 0; i < slide.length; i++) {

            BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = img.createGraphics();
            //clear the drawing area
            graphics.setPaint(Color.white);
            graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

            //render
            slide[i].draw(graphics);

            //save the output
            FileOutputStream out = new FileOutputStream("slide-"  + (i+1) + ".png");
            javax.imageio.ImageIO.write(img, "png", out);
            out.close();
        }

If background image is bigger than a slide, then it's cropped to a slide width and height. So you get left top corner of an image as a result. If background image is smaller, then it takes only a part of slide's area(see the attached files).

BTW, I've made the changes in attached patch to eliminate the issue.

In the patch we just transform image to slide's size. Obviously the solution is wrong, because we should preserve whole image unscaled till the last render(otherwise we'll loose quality), but it solved the problem of cropping the background image for me.

Artem
Comment 1 Nick Burch 2014-12-21 06:24:27 UTC
Any chance you could work up a small unit test for this?
Comment 2 Andreas Beeker 2016-03-23 22:57:32 UTC
I don't understand the proposed general scaling to page size.
Please add at least a .ppt/x which shows your issue - i'll then adapt your code.
My goal for rendering is always to stay close to the rendering of powerpoint.

As this issue hasn't got any attention for over a year I'm closing this as 
wontfix - feel free to reopen it (... with a .ppt/x attached)

Btw. I've tried to download Sanders slides, but only found the mentioned slides 
of 2008 on slideshare [1] and I'm not registering with linkedIn
just for downloading those.

[1] http://de.slideshare.net/sctemme/apache-performance-tuning-scaling-up
Comment 3 Nick Burch 2016-03-23 23:04:53 UTC
You just need to search the Apache SVN server harder Andreas! ;-)

Sander's slides can be downloaded from svn at https://svn.apache.org/repos/infra/apachecon/archive.apachecon.com/eu2008/program/materials/2411-Performance_Up.pptx / published at http://archive.apachecon.com/eu2008/program/materials/2411-Performance_Up.pptx
Comment 4 Andreas Beeker 2016-03-24 00:11:17 UTC
... although the background images fits nicely, it will give a NPE on page 5, because the BLIP fill is a AlternateContent.
I'll (try to) fix it ..