All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sksamuel.scrimage.webp.DWebpHandler Maven / Gradle / Ivy

package com.sksamuel.scrimage.webp;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class DWebpHandler extends WebpHandler {

   private static final Path binary;

   static {
      try {
         // write out binary to a location we can execute it from
         binary = createPlaceholder("dwebp");
         installDWebp();
      } catch (IOException e) {
         throw new RuntimeException(e);
      }
   }

   /**
    * Scrimage includes the latest dwebp binary. Alternatively, you can provide another version by
    * placing it on the classpath at `webp_binaries`, eg, /webp_binaries/dwebp.
    * 

* Binaries can be downloaded here: * https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html */ private static void installDWebp() throws IOException { installBinary(binary, getBinaryPath("dwebp")); } public byte[] convert(byte[] bytes) throws IOException { Path path = Files.createTempFile("input", "webp").toAbsolutePath(); Files.write(path, bytes, StandardOpenOption.CREATE); try { return convert(path); } finally { path.toFile().delete(); } } public byte[] convert(Path source) throws IOException { Path target = Files.createTempFile("from_webp", "png").toAbsolutePath(); try { convert(source, target); return Files.readAllBytes(target); } finally { target.toFile().delete(); } } private void convert(Path input, Path target) throws IOException { Path stdout = Files.createTempFile("stdout", "webp"); ProcessBuilder builder = new ProcessBuilder( binary.toAbsolutePath().toString(), input.toAbsolutePath().toString(), "-o", target.toAbsolutePath().toString() ); builder.redirectErrorStream(true); builder.redirectOutput(stdout.toFile()); Process process = builder.start(); try { process.waitFor(5, TimeUnit.MINUTES); int exitStatus = process.exitValue(); if (exitStatus != 0) { List error = Files.readAllLines(stdout); throw new IOException(error.toString()); } } catch (InterruptedException | IOException e) { throw new IOException(e); } finally { process.destroy(); stdout.toFile().delete(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy