Telegram Bot Java库下载的图像质量

Telegram Bot Java库下载的图像质量,java,jpa,bots,telegram,telegram-bot,Java,Jpa,Bots,Telegram,Telegram Bot,我正在使用rubenlagus的JavaAPI开发我的电报机器人。我能够成功地向机器人发送照片,并从电报中检索照片,如所示。问题是下载的图像比实际上传的图像小,质量也差。我使用Java持久性(JPA)将图像存储为blob。这是我的密码 从客户端接收图像的示例代码 List<PhotoSize> photos = message.getPhoto(); System.out.println("Photos --> " + photos.size());

我正在使用rubenlagus的JavaAPI开发我的电报机器人。我能够成功地向机器人发送照片,并从电报中检索照片,如所示。问题是下载的图像比实际上传的图像小,质量也差。我使用Java持久性(JPA)将图像存储为blob。这是我的密码

从客户端接收图像的示例代码

List<PhotoSize> photos = message.getPhoto();
            System.out.println("Photos --> " + photos.size());
            for (int i = 0; i < photos.size(); i++) {

                GetFile getFileRequest = new GetFile();

                getFileRequest.setFileId(photos.get(i).getFileId());
                File file = getFile(getFileRequest);
                //  System.out.println(file.getFilePath());
                downloadFilePath = filePathUrl + file.getFilePath();
                System.out.println("Photo --> " + downloadFilePath);
                java.io.File fileFromSystem =downloadFile(downloadFilePath);

                byte[] bytes = new byte[(int) fileFromSystem.length()];

                System.out.println( photo Size --> " + bytes.length);

                FileInputStream fileInputStream = new FileInputStream(fileFromSystem);
                fileInputStream.read(bytes);
                myEntity.setPhoto(bytes);
                myFacade.edit(myEntity);
将图像发送到客户端的代码(将字节[]从实体转换并发送到客户端)


这里有几种可能性:

  • 当您在bot api中获得一个时,
    photo
    对象是一个数组。您需要确保正在下载该数组中较大的一个(检查
    宽度
    高度
    参数)

  • 使用方法发送照片时,电报压缩照片(与从任何官方应用发送照片相同)。这意味着您的照片可能会失去一些质量。如果您不希望发生这种情况,您可以始终使用该方法


  • 希望这能解释问题。

    如果你是从rubenlagus得到的,为什么不跟rubenlagus谈谈?这和JPA有什么关系?你有一些图像字节,你保存它并检索它…它将是一样的。所以问题不在JPA中。所以调试问题在哪里is@gpasch已经做了,还没有运气谢谢鲁本,成功了。
    private java.io.File downloadFile(String fileUrl) {
        java.io.File file = null;
        try {
    
            sysProps = System.getProperties();
            URL url = new URL(fileUrl);
            InputStream in = url.openStream();
            String directoryPath = sysProps.getProperty("file.separator") + sysProps.getProperty("user.home") + sysProps.getProperty("file.separator") + "Documents" + sysProps.getProperty("file.separator") + "dev";
            java.io.File directory = new java.io.File(directoryPath);
    
            String pathToFile = directoryPath + sysProps.getProperty("file.separator") + new Random().nextInt(100) + fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
    
            if (!directory.exists()) {
                directory.mkdirs();
            }
            file = new java.io.File(pathToFile);
            file.createNewFile();
    
            FileOutputStream outputStream = new FileOutputStream(file);
            int read = 0;
    
            byte[] bytes =  new byte[10000];
            while ((read = in.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
    
            }
            outputStream.flush();
            outputStream.close();
    
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return file;
    }
    
      String strFilePath = sysProps.getProperty("user.home") + sysProps.getProperty("file.separator") + "Documents" + sysProps.getProperty("file.separator") + "dev" + sysProps.getProperty("file.separator") + new Random().nextInt(100) + ".jpeg";
                    FileOutputStream fos = new FileOutputStream(strFilePath);
                    fos.write(myEntity.getPhoto());
                    fos.close();
    
                    SendPhoto sendPhotoRequest = new SendPhoto();
                    sendPhotoRequest.setChatId(message.getChatId().toString());
                    java.io.File fileToSend = new java.io.File(strFilePath);
                    sendPhotoRequest.setNewPhoto(fileToSend);
    
                    //    System.out.println("Sending phtoto -->   " + strFilePath );
                    sendPhoto(sendPhotoRequest);
                    fileToSend.delete();