import joms.oms.Init import joms.oms.Mosaic import joms.oms.Video import joms.oms.Util import joms.oms.SingleImageChain import joms.oms.ossimFilename import joms.oms.ossimString import joms.oms.ossimIrect import joms.oms.ossimProjection import joms.oms.ossimScalarType import joms.oms.ossimImageHandler import joms.oms.ossimImageHandlerRegistry import joms.oms.ossimImageWriterFactoryRegistry import org.ossim.oms.image.omsRenderedImage; import org.ossim.oms.image.omsImageSource; import joms.oms.ossimImageViewAffineTransform class ThumbnailService { boolean transactional = true static def synchVar = 0 static { synchronized ( ThumbnailService.synchVar ) { Init.instance().initialize() } } def getThumbnail(String cacheDirPath, String thumbnailPrefix, int size, String mimeType, String inputFilename, String entryId, String projectionType) { def outputFile = new File( cacheDirPath, "${thumbnailPrefix}.jpg" ) def outputFileTemp = new File( cacheDirPath, "${thumbnailPrefix}.jpg.tmp" ) def histogramStretchType = "linear_auto_min_max" // for now we only support imagespace thumbnails // if ( projectionType != "imagespace" ) { projectionType = "imagespace" } // need to synchronize file creation for people hitting the server same time for the same request // // synchronized ( synchVar ) // { if ( !outputFile.exists() ) { def stretchTypeToUse = histogramStretchType if ( ThumbnailGenerator.writeImageSpaceThumbnail(inputFilename, entryId, outputFileTemp as String, mimeType, size, size, "", // use default stretchTypeToUse, true) ) { if ( outputFileTemp.exists() ) { outputFileTemp.renameTo(outputFile); } } } // } return outputFile } def getFrame(String cacheDirPath, String thumbnailPrefix, int size, String inputFilename) { Video video = new Video() def outputFile = new File(cacheDirPath, "${thumbnailPrefix}.jpg") if ( !outputFile.exists() ) { if ( video.open(inputFilename) ) { video.nextFrame(); video.writeCurrentFrameToFile(outputFile.absolutePath, size); } } return outputFile } }