gpt4 book ai didi

java - Telegram Bot Java 库下载的图像质量

转载 作者:行者123 更新时间:2023-12-01 09:28:43 29 4
gpt4 key购买 nike

我正在使用TelegramBots rubenlagus 的 Java API 用于开发我的 Telegram 机器人。我能够成功向机器人发送照片,并从 Telegram 检索照片,如 this example 所示。 。问题是,与实际上传的图像相比,下载的图像较小且质量较差。我使用 Java Persistence (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);

下载文件方法;

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();

最佳答案

这里有几种可能性:

  1. 当您在机器人 API 中获取 Message 时,photo 对象是一个 PhotoSize 数组。您需要确保下载该数组中较大的一个(检查宽度高度参数)。

  2. 使用 sendPhoto 方法发送照片时,Telegram 会压缩照片(与从任何官方应用程序发送照片相同。这意味着您的照片可能会损失一些质量。如果您不这样做)如果不想发生这种情况,您可以随时使用 sendDocument 方法。

希望这能解释问题。

关于java - Telegram Bot Java 库下载的图像质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39633091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com