package jp.dip.arimodoki.blogic;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.codec.binary.Base64;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import jp.dip.arimodoki.common.CConst;
import jp.dip.arimodoki.model.FormVideoSlice;
@Scope("singleton")
@Service
public class BlVideoSlice implements CConst {
private FormVideoSlice formVideoSlice;
public void setForm(FormVideoSlice form) {
this.formVideoSlice = form;
}
public void getFrame() throws Exception {
MultipartFile[] files = this.formVideoSlice.getUploadfile();
InputStream is = files[0].getInputStream();
FFmpegFrameGrabber frameGrabber= new FFmpegFrameGrabber(is);
Java2DFrameConverter frameConverter = new Java2DFrameConverter();
frameGrabber.start();
int count = 0;
ByteArrayOutputStream os = new ByteArrayOutputStream();
while (frameGrabber.getFrameNumber() < frameGrabber.getLengthInFrames()) {
BufferedImage img = frameConverter.convert(frameGrabber.grab());
if (img == null) {
continue;
}
ImageIO.write(img, "jpg", os);
count++;
break;
}
is.close();
frameGrabber.stop();
frameGrabber.close();
String base64 = new String(Base64.encodeBase64(os.toByteArray()), "ASCII");
StringBuffer data = new StringBuffer();
data.append("data:image/jpeg;base64,");
data.append(base64);
this.formVideoSlice.setBase64Jpg(data.toString());
os.close();
}
}
|