当前位置: 首页 > 知识库问答 >
问题:

如何使用java代码在没有任何失真的情况下上传到Bugzilla工具时获得图像的实际颜色?

杨飞语
2023-03-14

**我正在使用下面的代码将多个故障截图从文件夹中提取到Bugzilla工具,在Bugzilla中上传图片时,图片的颜色被破坏。[在此处输入图像描述][1]。有人能帮我纠正这个问题吗**

             try {
                 BugzillaConnector conn = new BugzillaConnector();
                 conn.connectTo("bugzilla.com");
                 LogIn logIn = new LogIn("username", "password");
                 conn.executeMethod(logIn);

                 Bug bug = new BugFactory()
                .newBug()
                .setProduct("SeleniumFramework")
                .setComponent("CoreJavaTestNG")
                 .setVersion("1.0").setPlatform("PC")
                 .setOperatingSystem("Windows")
                 .setDescription("Bug posted from Java Source Code")
                 .setSummary("Bug posted from Java Source Code")
                 .createBug();

                 ReportBug report = new ReportBug(bug);
                 conn.executeMethod(report);
                 int bugID = report.getID();
                 System.out.println("Bug posted and its ID is " + bugID);
                 GetBug get = new GetBug(bugID);
                 conn.executeMethod(get);

                 System.out.println(get.getBug().getID());
                 System.out.println(get.getBug().getSummary());
                 System.out.println(get.getBug().getProduct());
                 System.out.println(get.getBug().getComponent());
                 System.out.println(get.getBug().getVersion());
                 System.out.println(get.getBug().getPlatform());
                 System.out.println(get.getBug().getOperatingSystem());

            // Passing txtFileFilter to listFiles() method to retrieve only file start with fail files
            File[] files = folder.listFiles(txtFileFilter);
            int Count = 0;
            for (File file : files) {


                  BufferedImage bImage = ImageIO.read(new File(FilePath + file.getName()));
                  ByteArrayOutputStream bos = new ByteArrayOutputStream();
                  ImageIO.write(bImage, "jpg", bos );
                  byte [] data = bos.toByteArray();

                             AttachmentFactory attachmentFactory = new AttachmentFactory();
                             Attachment attachment = attachmentFactory.newAttachment()
                           . setData(data)
                           . setMime("image/jpg") //Set the appropriate MIME type for the image format
                           . setSummary(file.toString()) //Description
                           . setName(file.toString())//Name of the Screenshot in Bugzilla
                           . setBugID(bugID)
                           . createAttachment();

                            AddAttachment add2 = new AddAttachment(attachment, bugID);
                            add2.getID();
                            conn.executeMethod(add2);                    
            Count++;

            }
            System.out.println(Count + "  File Uploded");

             }
            catch (Exception e) {
            e.printStackTrace();
            } ```

  [1]: https://i.stack.imgur.com/qrIaq.jpg

共有1个答案

长孙明知
2023-03-14

你看到的粉红色/浅红色是因为源图像包含alpha通道。

ImageIO中有一个已知的bug,它会将alpha通道包含到JPEG图像的输出中(或者类似的东西,如果你真的感兴趣,可以用谷歌搜索)。

问题的基本解决方案是使用TYPE_INT_RGB将原始图像应用于BufferedImage,这将删除alpha通道,例如请参阅在PNG BufferedImage中删除透明度。

我使用了代码,但在图像上得到了蓝色背景

所以,从这个透明的巴布亚新几内亚开始

使用下面的代码。。。

BufferedImage original = ImageIO.read(new File("/Users/shanew/Downloads/transparent.png"));

BufferedImage copy = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = copy.createGraphics();
g2d.setColor(Color.WHITE); // Or what ever fill color you want...
g2d.fillRect(0, 0, copy.getWidth(), copy.getHeight());
g2d.drawImage(original, 0, 0, null);
g2d.dispose();

File dest = new File("Test.jpg");
ImageIO.write(copy, "jpg", dest);

BufferedImage test = ImageIO.read(dest);

JPanel panel = new JPanel();
panel.add(new JLabel(new ImageIcon(original)));
panel.add(new JLabel(new ImageIcon(test)));

JOptionPane.showMessageDialog(null, panel);

我可以制作。。。

如果你仍然有问题,那么你需要做两件事:

  1. 使用您正在使用的代码更新您的原始问题
  2. 提供您尝试转换的图像样本

在评论中持续发布代码是没有帮助的

 类似资料:
  • 我知道我可以获得包名并从完整的类名中去掉相应数量的字符,但我猜已经有人这么做了?

  • 我们有一个应用程序,将部署在具有不同IP的服务器上。JNLP是在构建时生成的。因此,我们定义了没有代码库的JNLP: 然而,当第二次启动这个应用程序时(从第一次启动时创建的桌面图标),代码库被设置为本地文件系统,这是绝对无用的。我希望Java Webstart在第一次启动应用程序时使用实际的源地址设置代码库。这似乎不是真的。 我如何准备一个通用的JNLP,它可以在不同的服务器上使用而无需修改?

  • 目前,我正在用下面的代码做一个非常简单的方法。 如果我删除代码的部分,它将图像打印为正常质量+正常大小,因为我希望它的高度限制在250,并返回类似于此图像的内容。 但它返回的内容类似于下面显示的内容。

  • 问题内容: 所以我最近遇到了这个问题: 我很好奇:有没有办法用较小的图像来做这种事情?我的意思是,这是像素艺术,而不是使用每个像素四倍的图像而不是我们用代码来拉伸它们吗?因此,我开始尝试实现这一目标。 我尝试了CSS,Javascript甚至HTML,但没有一个起作用。它们都变得非常模糊,这使我想到了一个问题:您可以在浏览器中拉伸图像而无需任何抗锯齿功能吗? 我愿意接受任何建议,无论是使用画布,j

  • 我是UI自动测试的新手,当只有.apk文件时,我无法弄清楚如何设置UI测试。 在线教程和其他示例没有显示如何使用我的3P. apk文件。我知道在Appium中,只需将文件/目录和名称添加到所需的功能,服务器就会安装它。

  • 有没有办法在Spring MVC中获取当前会话,但不是通过请求。通常,我们所做的是在操作/控制器类方法中获取请求。从这个请求中,我们逐个请求获得会话。getSession()。但是,有没有办法在没有此请求对象的情况下获取此会话? 我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的50多个方法中访问的。如果我必须从请求中获得会话,那么我需要更改所有这50个位