我尝试将背景透明的tiff格式的图像转换为jpeg,以将其大小调整为200x200或1200x1200,但在转换时,背景变为黑色,我希望在转换后保持背景透明或白色
我的代码如下:
public static void TiffToJpg(String tiff, String output) throws IOException {
File tiffFile = new File(tiff);
SeekableStream s = new FileSeekableStream(tiffFile);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = dec.decodeAsRenderedImage(0);
FileOutputStream fos = new FileOutputStream(output);
JPEGEncodeParam jpgparam = new JPEGEncodeParam();
jpgparam.setQuality(100);
ImageEncoder en = ImageCodec.createImageEncoder("jpeg", fos, jpgparam);
en.encode(op);
BufferedImage in = javax.imageio.ImageIO.read(new java.io.File("oi.jpg"));
BufferedImage out = scaleImage(in, BufferedImage.TYPE_INT_RGB, 200, 200);
javax.imageio.ImageIO.write(out, "JPG", new java.io.File("thumbnail.jpg"));
BufferedImage out2 = scaleImage(in, BufferedImage.TYPE_INT_RGB, 1200, 1200);
javax.imageio.ImageIO.write(out2, "JPG", new java.io.File("web-image.jpg"));
fos.flush();
fos.close();
}
public static void main(String[] args) throws Exception {
Tiffthumbs.TiffToJpg("oi.tif", "oi.jpg");
}
public static BufferedImage scaleImage(BufferedImage image, int imageType, int newWidth, int newHeight) {
// Make sure the aspect ratio is maintained, so the image is not distorted
double thumbRatio = (double) newWidth / (double) newHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double aspectRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < aspectRatio) {
newHeight = (int) (newWidth / aspectRatio);
} else {
newWidth = (int) (newHeight * aspectRatio);
}
// Draw the scaled image
BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D graphics2D = newImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, newWidth, newHeight, null);
return newImage;
}
这在java JAI中是如何实现的?
将“缩放图像”功能更改为下面的代码,它应该可以工作。它所做的只是在绘制实际图像之前,用白色重新绘制完整图像:
public static BufferedImage scaleImage(BufferedImage image, int imageType, int newWidth, int newHeight) {
// Make sure the aspect ratio is maintained, so the image is not distorted
double thumbRatio = (double) newWidth / (double) newHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double aspectRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < aspectRatio) {
newHeight = (int) (newWidth / aspectRatio);
} else {
newWidth = (int) (newHeight * aspectRatio);
}
// Draw the scaled image
BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D graphics2D = newImage.createGraphics();
graphics2D.setColor(Color.WHITE);
graphics2D.fillRect(0, 0, newWidth, newHeight);
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, newWidth, newHeight, null);
return newImage;
}
不变:
变更后:
我正在将PNG转换为JPG。透明背景默认变为黑色。我需要它是白色的。
问题内容: 我正在使用以下代码在Windows和Linux中设置任务栏图标。它在Windows中效果很好,在Linux中效果很好。在Linux(Ubuntu)中,我将面板设置为(某种程度上)透明,并且当我添加GIF(具有透明背景)时,图标的背景显示为灰色和丑陋的所有颜色(参见图像,绿色菱形“!”)。 …有关如何制作GIF图片的任何想法,我要“保留”其透明背景? 替代文字http://unarm.o
我注意到在具有透明背景的图像上使用CSS颜色变换会产生意想不到的效果。下面是一个示例: 总而言之,问题是这样的。如果将鼠标悬停在image div div的填充上,则此div的背景色和包含的image div以与预期相同的速率执行颜色转换。但是,如果将鼠标悬停在图像div上,其颜色的过渡速度似乎略快于图像div div的颜色。 鉴于我能够在Firefox、Chrome、Safari和Edge上重现
我有一个带有文本块的div元素和一个父div,我在其中设置了一个背景图像。现在我想降低背景图像的不透明度。请建议我怎么做。 提前谢谢。 编辑: 我希望通过编辑 html 内容来改变我的博客文章看待 blogger.com 的方式。html 代码如下所示: 我试图用 div 元素包围上面的整个代码,并分别设置每个 div 的不透明度,如下所示: 但它不起作用。
问题内容: 我有一个DIV,我想放置一个图案作为背景。此图案是灰色的。为了使它更好一点,我想在上面放一个透明的颜色“层”。以下是我尝试过的方法,但是没有用。有没有办法将彩色图层放在背景图像上? 这是我的CSS: 问题答案: 这里是: 对此的HTML: 当然,如果其中没有其他元素,则需要为该类定义宽度和高度
通过使用启用透明背景功能,可以使用自定义图片作为背景。 controller.setTransparentBackground( true );