From 22fc5e48cbe050d8485f78f6165b59e4085eaeef Mon Sep 17 00:00:00 2001 From: James Moger Date: Sat, 25 Jun 2011 17:10:59 -0400 Subject: Moved Build classes to their own package --- src/com/gitblit/build/BuildThumbnails.java | 134 +++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/com/gitblit/build/BuildThumbnails.java (limited to 'src/com/gitblit/build/BuildThumbnails.java') diff --git a/src/com/gitblit/build/BuildThumbnails.java b/src/com/gitblit/build/BuildThumbnails.java new file mode 100644 index 00000000..f1bdbdef --- /dev/null +++ b/src/com/gitblit/build/BuildThumbnails.java @@ -0,0 +1,134 @@ +/* + * Copyright 2011 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit.build; + +import java.awt.Dimension; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.Iterator; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.Parameters; + +public class BuildThumbnails { + + public static void main(String[] args) { + Params params = new Params(); + JCommander jc = new JCommander(params); + try { + jc.parse(args); + } catch (ParameterException t) { + System.err.println(t.getMessage()); + jc.usage(); + } + createImageThumbnail(params.sourceFolder, params.destinationFolder, params.maximumDimension); + } + + public static void createImageThumbnail(String sourceFolder, String destinationFolder, + int maxDimension) { + if (maxDimension <= 0) + return; + File source = new File(sourceFolder); + File destination = new File(destinationFolder); + destination.mkdirs(); + File[] sourceFiles = source.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".png"); + } + }); + + for (File sourceFile : sourceFiles) { + File destinationFile = new File(destination, sourceFile.getName()); + try { + Dimension sz = getImageDimensions(sourceFile); + int w = 0; + int h = 0; + if (sz.width > maxDimension) { + // Scale to Width + w = maxDimension; + float f = maxDimension; + h = (int) ((f / sz.width) * sz.height); // normalize height + } else if (sz.height > maxDimension) { + // Scale to Height + h = maxDimension; + float f = maxDimension; + w = (int) ((f / sz.height) * sz.width); // normalize width + } else { + // No thumbnail + return; + } + System.out.println("Generating thumbnail for " + sourceFile.getName() + " as (" + w + + "," + h + ")"); + BufferedImage image = ImageIO.read(sourceFile); + Image scaledImage = image.getScaledInstance(w, h, BufferedImage.SCALE_SMOOTH); + BufferedImage destImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + destImage.createGraphics().drawImage(scaledImage, 0, 0, null); + FileOutputStream fos = new FileOutputStream(destinationFile); + ImageIO.write(destImage, "png", fos); + fos.flush(); + fos.getFD().sync(); + fos.close(); + } catch (Throwable t) { + t.printStackTrace(); + } + } + } + + public static Dimension getImageDimensions(File file) throws IOException { + ImageInputStream in = ImageIO.createImageInputStream(file); + try { + final Iterator readers = ImageIO.getImageReaders(in); + if (readers.hasNext()) { + ImageReader reader = readers.next(); + try { + reader.setInput(in); + return new Dimension(reader.getWidth(0), reader.getHeight(0)); + } finally { + reader.dispose(); + } + } + } finally { + if (in != null) + in.close(); + } + return null; + } + + @Parameters(separators = " ") + private static class Params { + + @Parameter(names = { "--sourceFolder" }, description = "Source folder for raw images", required = true) + public String sourceFolder; + + @Parameter(names = { "--destinationFolder" }, description = "Destination folder for thumbnails", required = true) + public String destinationFolder; + + @Parameter(names = { "--maximumDimension" }, description = "Maximum width or height for thumbnail", required = true) + public int maximumDimension; + + } +} -- cgit v1.2.3