extensions/net.sf.basedb.thumbnails/trunk/src/net/sf/basedb/thumbnails/impl/SvgImageLoader.java

Code
Comments
Other
Rev Date Author Line
5351 10 Apr 19 nicklas 1 package net.sf.basedb.thumbnails.impl;
5351 10 Apr 19 nicklas 2
5351 10 Apr 19 nicklas 3 import java.io.ByteArrayOutputStream;
5351 10 Apr 19 nicklas 4 import java.io.IOException;
5351 10 Apr 19 nicklas 5 import java.io.InputStream;
6044 11 Nov 20 nicklas 6 import java.nio.charset.StandardCharsets;
5351 10 Apr 19 nicklas 7
6043 11 Nov 20 nicklas 8 import org.imgscalr.Scalr.Rotation;
6043 11 Nov 20 nicklas 9
6053 13 Nov 20 nicklas 10 import net.sf.basedb.thumbnails.Crop;
5351 10 Apr 19 nicklas 11 import net.sf.basedb.thumbnails.ImageLoader;
5351 10 Apr 19 nicklas 12 import net.sf.basedb.thumbnails.ThumbnailSize;
5351 10 Apr 19 nicklas 13 import net.sf.basedb.util.FileUtil;
5351 10 Apr 19 nicklas 14
5351 10 Apr 19 nicklas 15 /**
5351 10 Apr 19 nicklas 16   Image loader implementation that expects an SVG file. No 
5351 10 Apr 19 nicklas 17   conversion or scaling is done, but the file is returned
5351 10 Apr 19 nicklas 18   unmodified expecting that web browser can display it.
5351 10 Apr 19 nicklas 19   
5351 10 Apr 19 nicklas 20   @author nicklas
5351 10 Apr 19 nicklas 21   @since 1.1
5351 10 Apr 19 nicklas 22 */
5351 10 Apr 19 nicklas 23 public class SvgImageLoader 
5351 10 Apr 19 nicklas 24   implements ImageLoader
5351 10 Apr 19 nicklas 25 {
5351 10 Apr 19 nicklas 26   public SvgImageLoader()
5351 10 Apr 19 nicklas 27   {}
5351 10 Apr 19 nicklas 28
5351 10 Apr 19 nicklas 29   private byte[] svg;
5351 10 Apr 19 nicklas 30
5351 10 Apr 19 nicklas 31   @Override
5351 10 Apr 19 nicklas 32   public String getThumbMimeType()
5351 10 Apr 19 nicklas 33   {
5351 10 Apr 19 nicklas 34     return "image/svg+xml";
5351 10 Apr 19 nicklas 35   }
5351 10 Apr 19 nicklas 36
5351 10 Apr 19 nicklas 37   @Override
5351 10 Apr 19 nicklas 38   public String getThumbExtension()
5351 10 Apr 19 nicklas 39   {
5351 10 Apr 19 nicklas 40     return "svg";
5351 10 Apr 19 nicklas 41   }
5351 10 Apr 19 nicklas 42
5351 10 Apr 19 nicklas 43   @Override
6046 11 Nov 20 nicklas 44   public void loadImage(InputStream in, int imageIndex) 
5351 10 Apr 19 nicklas 45     throws IOException 
5351 10 Apr 19 nicklas 46   {
5351 10 Apr 19 nicklas 47     ByteArrayOutputStream tmp = new ByteArrayOutputStream(10000);
5351 10 Apr 19 nicklas 48     FileUtil.copy(in, tmp);
5351 10 Apr 19 nicklas 49     svg = tmp.toByteArray();
5351 10 Apr 19 nicklas 50   }
5351 10 Apr 19 nicklas 51
5351 10 Apr 19 nicklas 52   @Override
6053 13 Nov 20 nicklas 53   public byte[] getThumbImage(ThumbnailSize size, Rotation rotation, Crop crop) 
5351 10 Apr 19 nicklas 54     throws IOException 
5351 10 Apr 19 nicklas 55   {
6044 11 Nov 20 nicklas 56     if (rotation == null) return svg;
6044 11 Nov 20 nicklas 57     
6044 11 Nov 20 nicklas 58     String transform = null;
6044 11 Nov 20 nicklas 59     switch (rotation)
6044 11 Nov 20 nicklas 60     {
6044 11 Nov 20 nicklas 61       case CW_180:
6044 11 Nov 20 nicklas 62         transform = "rotate(180)";
6044 11 Nov 20 nicklas 63         break;
6044 11 Nov 20 nicklas 64       case CW_270:
6044 11 Nov 20 nicklas 65         transform = "rotate(270)";
6044 11 Nov 20 nicklas 66         break;
6044 11 Nov 20 nicklas 67       case CW_90:
6044 11 Nov 20 nicklas 68         transform = "rotate(90)";
6044 11 Nov 20 nicklas 69         break;
6044 11 Nov 20 nicklas 70       case FLIP_HORZ:
6044 11 Nov 20 nicklas 71         transform = "scale(-1,1)";
6044 11 Nov 20 nicklas 72         break;
6044 11 Nov 20 nicklas 73       case FLIP_VERT:
6044 11 Nov 20 nicklas 74         transform = "scale(1,-1)";
6044 11 Nov 20 nicklas 75         break;
6044 11 Nov 20 nicklas 76       default:
6044 11 Nov 20 nicklas 77         break;
6044 11 Nov 20 nicklas 78     }
6044 11 Nov 20 nicklas 79     if (transform == null) return svg;
6044 11 Nov 20 nicklas 80     
6044 11 Nov 20 nicklas 81     String xml = new String(svg, StandardCharsets.UTF_8);
6044 11 Nov 20 nicklas 82     xml = xml.replace("<svg", "<svg transform=\""+transform+"\"");
6044 11 Nov 20 nicklas 83     return xml.getBytes(StandardCharsets.UTF_8);
5351 10 Apr 19 nicklas 84   }
5351 10 Apr 19 nicklas 85   
5351 10 Apr 19 nicklas 86 }