如何上传按钮中已缩放处理的图标至服务器?
解决按钮缩放图标上传问题
这个场景我太熟悉了!你现在上传的是图库原图的路径,自然会把完整尺寸的原图发过去。要上传按钮上显示的那个缩放后的图标,核心是先提取按钮上渲染好的缩放图片,再把它转换成可上传的格式,而不是直接用原图路径。
下面是具体的实现步骤和代码修改:
核心思路
- 获取按钮上当前显示的缩放后图片(或者根据按钮的显示尺寸重新缩放原图)
- 将图片转换成字节流或临时文件
- 上传处理后的图片数据,而非原图路径
修改后的代码示例
getImageButton.addActionListener(f -> { Display.getInstance().openGallery(new ActionListener() { public void actionPerformed(ActionEvent evt) { if(evt != null && evt.getSource() != null) { String originalImagePath = (String)evt.getSource(); try { // 1. 按按钮的显示尺寸缩放图片 int targetWidth = Display.getInstance().getDisplayWidth(); int targetHeight = targetWidth / 2; Image originalImage = Image.createImage(originalImagePath); // 生成和按钮显示一致的缩放图 Image scaledButtonImage = originalImage.scaled(targetWidth, targetHeight); // 2. 将缩放图转换成可上传的EncodedImage // 这里用JPEG格式,质量设为70(可根据需求调整) EncodedImage encodedScaledImage = EncodedImage.createFromImage(scaledButtonImage, EncodedImage.JPEG, 70); byte[] scaledImageData = encodedScaledImage.getImageData(); // 3. 上传处理后的图片数据 // 情况A:如果你的上传接口接受字节数组,直接传 // yourUploadService.uploadImage(scaledImageData, "scaled_image.jpg"); // 情况B:如果接口需要文件路径,把字节写入临时文件 String tempScaledPath = FileSystemStorage.getInstance().createTempFile("btn_scaled_", ".jpg"); FileSystemStorage.getInstance().writeFile(tempScaledPath, scaledImageData); // 然后上传这个临时文件路径 // yourUploadService.uploadImageByPath(tempScaledPath); } catch(IOException e) { e.printStackTrace(); // 这里可以加用户提示,比如Toast.show("图片处理失败", Toast.LENGTH_LONG); } } } }, Display.GALLERY_IMAGE); });
额外优化点
如果按钮的图标已经是你设置好的缩放版本,那可以直接从按钮获取,省去重新缩放的步骤:
// 直接拿按钮上的图标 Image scaledButtonImage = getImageButton.getIcon();
这样能确保你上传的就是按钮上显示的那一张,完全匹配显示尺寸。
内容的提问来源于stack exchange,提问作者beck
相关产品推荐
相关产品推荐

