我正在使用javax.imageio.ImageIO
保存BufferedImage
为jpeg文件.特别是,我创建了以下Java函数:
public static void getScreenShot(BufferedImage capture, Path folder, String filename) {
try {
ImageIO.write(capture, "jpeg", new File(folder.toString()+"/"+filename+".jpg"));
} catch (AWTException | IOException ex) {
Logger.getLogger(ScreenShotMaker.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
同样任何图像处理软件,我希望改变jpeg文件的压缩级别.但是,我正在寻找似乎缺少的这个选项ImageIO
.
我可以设置压缩级别以及如何设置?
在我的当前项目(jdk 1.6.0)中添加了powermock(1.5.6与Easymock 3.2的组合)之后,我在测试方法中遇到了一些测试失败,这些测试方法之前完全正常:
java.lang.UnsatisfiedLinkError:com.sun.imageio.plugins.jpeg.JPEGImageReader.initReaderIDs(Ljava/lang/Class; Ljava/lang/Class; Ljava/lang/Class;)V
以下代码失败:
BufferedImage img = null;
try {
img = ImageIO.read(this.getClass().getResourceAsStream("/example.jpg"));
}
catch (IOException e) {
fail(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
powermock页面已经有一个2009年的错误,但没有修复,没有解决方法.(回到32Bit是无稽之谈,因为这些方法没有电动摇摆工作)所以有人知道如何解决这个问题吗?
更新I:切换到32位是没有选择,除此之外,这不是问题.如果我不使用PowerMock,每个测试都在64Bit JVM中完美运行......
更新II:这里是请求的信息
更新III:扩展课程
要测试的类
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import javax.imageio.ImageIO;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.CertificateSubjectName;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class App {
private X509Certificate certificate = null;
public ByteArrayOutputStream readImage() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage img = null;
try { …
Run Code Online (Sandbox Code Playgroud)