簡體   English   中英

如何在使用 java 代碼上傳到 Bugzilla 工具時獲得圖像的實際顏色而不會出現任何失真?

[英]How can I get the actual color of the image while uploading to Bugzilla tool using java code with out any distortion?

**我正在使用下面的代碼從文件夾中獲取多個失敗截圖到 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

您看到的粉紅色/淡紅色是因為源圖像包含 Alpha 通道。

ImageIO中有一個已知錯誤,它會將 alpha 通道包含到 JPEG 圖像的 output 中(或者類似的東西,如果你真的感興趣,可以用谷歌搜索)。

您的問題的基本解決方案是使用TYPE_INT_RGB將原始圖像應用於BufferedImage ,這將刪除 alpha 通道,例如,請參閱刪除 PNG BufferedImage 中的透明度

我使用了代碼,但在圖像上得到了藍色背景

所以,從這個透明的PNG開始

原始圖像

並使用下面的代碼......

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. 提供您嘗試轉換的圖像樣本

繼續在評論中發布代碼沒有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM