java jfif,win10保存图片成了jfif格式怎么办?

在win10里,如果你保存网页上的图片,常常会发现保存的不是jpg、png、gif等常见格式,而是jfif格式,这种格式非常少见,很多图像编辑软件都识别不了。

d7cd7aead73b42f7efd4aacb1b723529.png

虽然Jfif是由JPEG格式衍生而来,后缀为".jfif",它也是图片存储格式之一, 但不常用会造成我们很多不便,在这里飘叶教大家一个简单的方法,就可以改为保存的图片还是jpg格式。

随便打开一个文件夹,如“我的文档”,然后单击“查看”,把文件扩展名勾上:

db4a85809885cb04aee81dc14e3b87ec.png

再在这个文件夹用鼠标右键新建一个文本文档:

ce838123e91d38feb9867f39c635d7f0.png

在这个文档里复制粘贴这段文字并保存:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\image/jpeg]

"Extension"=".jpg"

8123b101fafeafdaf34d597af0f2a56e.png

然后把这个文件的扩展名txt改为reg,单击“是”:

c8d365d071bd51b7ecf387f4f2a32fbb.png

改好后,双击这个文件运行,在弹出的窗口中都点击“是”

b28d556eae9e6737d8c9bc8a80a72cc2.png

4b605c668f3e74519751295eb3adc167.png

至此,你再保存图片时会发现,又能保存为jpg格式啦 !

b2ac5f8ea272f6a2ba4b370590f023cf.png

f68800c27a98231e64d3705e7c519301.gif

加我公众号,你会掌握更多技术知识

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在设置DPI时,`app0Jfif`为null,可以尝试使用`javax_imageio_1.0`元数据标记来设置DPI。下面是修改后的代码: ```java import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.metadata.IIOMetadata; import javax.imageio.metadata.IIOMetadataNode; import javax.imageio.plugins.jpeg.JPEGImageWriteParam; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ImageDPIExample { public static void main(String[] args) { // 加载图像 BufferedImage image = null; try { image = ImageIO.read(new File("input.jpg")); } catch (IOException e) { e.printStackTrace(); } // 创建一个新的图像,设置分辨率 BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = newImage.createGraphics(); g2d.drawImage(image, 0, 0, null); g2d.dispose(); // 设置DPI String outputImagePath = "output.jpg"; File outputFile = new File(outputImagePath); try { ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam writeParam = writer.getDefaultWriteParam(); if (writeParam.canWriteCompressed()) { writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); writeParam.setCompressionQuality(1f); } // 设置DPI IIOMetadata metadata = writer.getDefaultImageMetadata(ImageTypeSpecifier.createFromRenderedImage(newImage), writeParam); String metadataFormat = metadata.getNativeMetadataFormatName(); IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(metadataFormat); IIOMetadataNode jpegVariety = getChildNode(root, "JPEGvariety"); IIOMetadataNode markerSequence = getChildNode(jpegVariety, "markerSequence"); IIOMetadataNode app0JFIF = getChildNode(markerSequence, "app0JFIF"); if (app0JFIF == null) { app0JFIF = new IIOMetadataNode("app0JFIF"); app0JFIF.setAttribute("majorVersion", "1"); app0JFIF.setAttribute("minorVersion", "2"); app0JFIF.setAttribute("resUnits", "1"); app0JFIF.setAttribute("Xdensity", "300"); app0JFIF.setAttribute("Ydensity", "300"); markerSequence.appendChild(app0JFIF); } else { app0JFIF.setAttribute("resUnits", "1"); app0JFIF.setAttribute("Xdensity", "300"); app0JFIF.setAttribute("Ydensity", "300"); } metadata.mergeTree(metadataFormat, root); // 保存图像 writer.setOutput(ImageIO.createImageOutputStream(outputFile)); writer.write(metadata, new IIOImage(newImage, null, metadata), writeParam); writer.dispose(); } catch (IOException e) { e.printStackTrace(); } } private static IIOMetadataNode getChildNode(IIOMetadataNode parentNode, String nodeName) { for (int i = 0; i < parentNode.getLength(); i++) { if (parentNode.item(i).getNodeName().equalsIgnoreCase(nodeName)) { return (IIOMetadataNode) parentNode.item(i); } } return null; } } ``` 上述代码中,我们使用`getChildNode()`方法来获取元数据节点,如果`app0JFIF`节点不存在,则创建一个新的节点,并设置相关属性。如果`app0JFIF`节点已存在,则直接设置属性值。 这样修改后的代码应该可以在没有`app0JFIF`节点的情况下设置DPI。请注意,上述示例代码仅适用于保存JPEG图像,并且设置的DPI为300。你可以根据需要进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值