use of org.olat.core.commons.services.thumbnail.FinalSize in project OpenOLAT by OpenOLAT.
the class MetaInfoFileImpl method getThumbnailInfo.
private Thumbnail getThumbnailInfo(int maxWidth, int maxHeight, boolean fill) {
for (Thumbnail thumbnail : thumbnails) {
if (maxHeight == thumbnail.getMaxHeight() && maxWidth == thumbnail.getMaxWidth()) {
if (thumbnail.exists()) {
return thumbnail;
}
}
}
// generate a file name
File metaLoc = metaFile.getParentFile();
String name = originFile.getName();
String extension = FileUtils.getFileSuffix(name);
String nameOnly = name.substring(0, name.length() - extension.length() - 1);
String randuuid = UUID.randomUUID().toString();
String thumbnailExtension = preferedThumbnailType(extension);
File thumbnailFile = new File(metaLoc, nameOnly + "_" + randuuid + "_" + maxHeight + "x" + maxWidth + (fill ? "xfill" : "") + "." + thumbnailExtension);
// generate thumbnail
long start = 0l;
if (log.isDebug())
start = System.currentTimeMillis();
VFSLeaf thumbnailLeaf = new LocalFileImpl(thumbnailFile);
VFSLeaf originLeaf = new LocalFileImpl(originFile);
if (thumbnailService != null && thumbnailService.isThumbnailPossible(thumbnailLeaf)) {
try {
if (thumbnails.isEmpty()) {
// be paranoid
cannotGenerateThumbnail = true;
write();
}
log.info("Start thumbnail: " + thumbnailLeaf);
FinalSize finalSize = thumbnailService.generateThumbnail(originLeaf, thumbnailLeaf, maxWidth, maxHeight, fill);
if (finalSize == null) {
return null;
} else {
Thumbnail thumbnail = new Thumbnail();
thumbnail.setMaxHeight(maxHeight);
thumbnail.setMaxWidth(maxWidth);
thumbnail.setFinalHeight(finalSize.getHeight());
thumbnail.setFinalWidth(finalSize.getWidth());
thumbnail.setFill(true);
thumbnail.setThumbnailFile(thumbnailFile);
thumbnails.add(thumbnail);
cannotGenerateThumbnail = false;
write();
log.info("Create thumbnail: " + thumbnailLeaf);
if (log.isDebug()) {
log.debug("Creation of thumbnail takes (ms): " + (System.currentTimeMillis() - start));
}
return thumbnail;
}
} catch (CannotGenerateThumbnailException e) {
// don't try every time to create the thumbnail.
cannotGenerateThumbnail = true;
write();
return null;
}
}
return null;
}
use of org.olat.core.commons.services.thumbnail.FinalSize in project OpenOLAT by OpenOLAT.
the class ImageMagickHelper method thumbnailPDF.
@Override
public Size thumbnailPDF(VFSLeaf pdfFile, VFSLeaf thumbnailFile, int maxWidth, int maxHeight) {
File baseFile = extractIOFile(pdfFile);
File thumbnailBaseFile = extractIOFile(thumbnailFile);
FinalSize finalSize = generateThumbnail(baseFile, thumbnailBaseFile, true, maxWidth, maxHeight, false);
if (finalSize != null) {
return new Size(finalSize.getWidth(), finalSize.getHeight(), true);
}
return null;
}
use of org.olat.core.commons.services.thumbnail.FinalSize in project OpenOLAT by OpenOLAT.
the class ImageMagickHelper method executeProcess.
private final FinalSize executeProcess(File thumbnailFile, Process proc) {
FinalSize rv = null;
StringBuilder errors = new StringBuilder();
StringBuilder output = new StringBuilder();
String line;
InputStream stderr = proc.getErrorStream();
InputStreamReader iserr = new InputStreamReader(stderr);
BufferedReader berr = new BufferedReader(iserr);
line = null;
try {
while ((line = berr.readLine()) != null) {
errors.append(line);
}
} catch (IOException e) {
//
}
InputStream stdout = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdout);
BufferedReader br = new BufferedReader(isr);
line = null;
try {
while ((line = br.readLine()) != null) {
output.append(line);
}
} catch (IOException e) {
//
}
if (log.isDebug()) {
log.debug("Error: " + errors.toString());
log.debug("Output: " + output.toString());
}
try {
int exitValue = proc.waitFor();
if (exitValue == 0) {
rv = extractSizeFromOutput(thumbnailFile, output);
if (rv == null) {
// sometimes verbose info of convert is in stderr
rv = extractSizeFromOutput(thumbnailFile, errors);
}
}
} catch (InterruptedException e) {
//
}
if (rv == null) {
log.warn("Could not generate thumbnail: " + thumbnailFile, null);
}
return rv;
}
use of org.olat.core.commons.services.thumbnail.FinalSize in project OpenOLAT by OpenOLAT.
the class ImageMagickHelper method extractSizeFromChuck.
private FinalSize extractSizeFromChuck(String chuck) {
FinalSize size = null;
if (chuck.indexOf('x') > 0) {
String[] sizes = chuck.split("x");
if (sizes.length == 2) {
try {
int width = Integer.parseInt(sizes[0]);
int height = Integer.parseInt(sizes[1]);
return new FinalSize(width, height);
} catch (NumberFormatException e) {
// not a number, it's possible
if (log.isDebug()) {
log.debug("Not a size: " + chuck, null);
}
}
}
}
return size;
}
use of org.olat.core.commons.services.thumbnail.FinalSize in project OpenOLAT by OpenOLAT.
the class MovieServiceImpl method generateThumbnail.
@Override
public FinalSize generateThumbnail(VFSLeaf file, VFSLeaf thumbnailFile, int maxWidth, int maxHeight, boolean fill) throws CannotGenerateThumbnailException {
FinalSize size = null;
if (file instanceof LocalFileImpl && thumbnailFile instanceof LocalFileImpl) {
try {
WorkThreadInformations.setInfoFiles(null, file);
WorkThreadInformations.set("Generate thumbnail (video) VFSLeaf=" + file);
File baseFile = ((LocalFileImpl) file).getBasefile();
File scaledImage = ((LocalFileImpl) thumbnailFile).getBasefile();
BufferedImage frame = FrameGrab.getFrame(baseFile, 20);
Size scaledSize = ImageHelperImpl.calcScaledSize(frame, maxWidth, maxHeight);
if (ImageHelperImpl.writeTo(frame, scaledImage, scaledSize, "jpeg")) {
size = new FinalSize(scaledSize.getWidth(), scaledSize.getHeight());
}
// NullPointerException can be thrown if the jcodec cannot handle the codec of the movie
// ArrayIndexOutOfBoundsException
} catch (Exception | AssertionError e) {
log.error("", e);
} finally {
WorkThreadInformations.unset();
}
}
return size;
}
Aggregations