我试图用codenameone从一个imgur png创建一个URL图片,用这个代码。
Form hi = new Form(new BoxLayout(BoxLayout.Y_AXIS));
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(hi.getWidth(), hi.getWidth() / 5, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, "test2.png","https://i.imgur.com/VMwUrqH.png", URLImage.RESIZE_SCALE_TO_FILL);
background.fetch();
hi.add(background);
hi.show();
但它只是给我这个错误。
Exception: java.lang.IllegalArgumentException - create image failed for the given image data of length: 7165
给定的文件是一个有效的PNG图像数据,512 x 566,8-bitcolor RGBA,非隔行扫描。在《代号一号》中应该可以正常工作,但事实并非如此。你的代码给了我同样的异常。
事实上,Codename One下载的文件与我们从浏览器下载的文件完全不同。Codename One下载的文件是一个(有效的?)PNG图像数据,1080 x 216,8-bitcolor RGBA,非隔行扫描。我怀疑服务器正在应用重定向,以避免像这样的自动下载。
为了证实我的假设,我改变了代号一的用户代理,把它分配到我的浏览器上。
ConnectionRequest.setDefaultUserAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0");
结果是它可以工作了!:-)
然而,为了迫使代号一号用给定的用户代理重新下载文件,你必须删除以下文件 test2.png
文件从 .cn1
目录。
这是完整的工作代码。
Form hi = new Form(new BoxLayout(BoxLayout.Y_AXIS));
ConnectionRequest.setDefaultUserAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0");
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(hi.getWidth(), hi.getWidth() / 5, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, "test2.png", "https://i.imgur.com/VMwUrqH.png", URLImage.RESIZE_SCALE_TO_FILL);
background.fetch();
hi.add(background);
hi.show();