Anonymous
Почему я не могу отображать base64 с моим конвертером
Сообщение
Anonymous » 31 янв 2025, 09:55
Я занимаюсь чтением паспорта NFC, а результат DG1 - SucdD, но DG2 Я хочу получить паспорт профиля изображения, и это мой код, который я конвертирую в BASE64, но программа не отображает изображение < /p>
Код: Выделить всё
package com.example.demo;
import com.google.gson.Gson;
import net.sf.scuba.smartcards.*;
import net.sf.scuba.smartcards.CommandAPDU;
import net.sf.scuba.smartcards.ResponseAPDU;
import org.jmrtd.BACKey;
import org.jmrtd.BACKeySpec;
import org.jmrtd.PassportService;
import org.jmrtd.lds.icao.*;
import org.jmrtd.lds.iso19794.FaceImageInfo;
import org.jmrtd.lds.iso19794.FaceInfo;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.smartcardio.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.List;
import javax.imageio.stream.MemoryCacheImageInputStream;
@RestController
@CrossOrigin(origins = "*")
public class Api {
private static final Gson gson = new Gson();
@PostMapping("/readpassport") // ✅ Read Passport Data
public String readPassport(@RequestBody Map requestData) {
try {
String passportNo = requestData.get("documentNo");
String expiryDate = requestData.get("expiryDate");
String birthDate = requestData.get("birthDate");
if (passportNo == null || expiryDate == null || birthDate == null) {
return gson.toJson(Map.of("error", "Missing parameters"));
}
BACKeySpec bacKey = new BACKey(passportNo, birthDate, expiryDate);
Map passportData = readPassportData(bacKey);
return gson.toJson(passportData);
} catch (Exception e) {
return gson.toJson(Map.of("error", "Failed to read passport", "details", e.getMessage()));
}
}
// 📌 Convert JP2 to JPEG and Base64
private static String convertJP2ToBase64(byte[] jp2Bytes) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(jp2Bytes);
BufferedImage image = ImageIO.read(new MemoryCacheImageInputStream(bais));
if (image == null) {
throw new IOException("❌ Failed to decode JP2 image.");
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos); // Convert to JPEG
return Base64.getEncoder().encodeToString(baos.toByteArray());
} catch (IOException e) {
System.err.println("❌ JP2 conversion failed: " + e.getMessage());
return "";
}
}
// 📌 Read Passport Data from ACS Smart Card Reader
private Map readPassportData(BACKeySpec bacKey) {
Map passportData = new HashMap();
try {
CardService cardService = connectACSReader();
cardService.open();
PassportService service = new PassportService(cardService, PassportService.NORMAL_MAX_TRANCEIVE_LENGTH,
PassportService.DEFAULT_MAX_BLOCKSIZE, true, false);
service.open();
service.sendSelectApplet(false);
service.doBAC(bacKey);
// 📌 Read MRZ Info (Name, Surname, DOB, etc.)
CardFileInputStream dg1In = service.getInputStream(PassportService.EF_DG1);
DG1File dg1File = new DG1File(dg1In);
MRZInfo mrzInfo = dg1File.getMRZInfo();
passportData.put("Name", mrzInfo.getSecondaryIdentifier().replace("
Подробнее здесь: [url]https://stackoverflow.com/questions/79401982/why-i-cant-display-base64-with-my-converter[/url]
1738306532
Anonymous
Я занимаюсь чтением паспорта NFC, а результат DG1 - SucdD, но DG2 Я хочу получить паспорт профиля изображения, и это мой код, который я конвертирую в BASE64, но программа не отображает изображение < /p> [code]package com.example.demo; import com.google.gson.Gson; import net.sf.scuba.smartcards.*; import net.sf.scuba.smartcards.CommandAPDU; import net.sf.scuba.smartcards.ResponseAPDU; import org.jmrtd.BACKey; import org.jmrtd.BACKeySpec; import org.jmrtd.PassportService; import org.jmrtd.lds.icao.*; import org.jmrtd.lds.iso19794.FaceImageInfo; import org.jmrtd.lds.iso19794.FaceInfo; import org.json.JSONObject; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.smartcardio.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.*; import java.util.List; import javax.imageio.stream.MemoryCacheImageInputStream; @RestController @CrossOrigin(origins = "*") public class Api { private static final Gson gson = new Gson(); @PostMapping("/readpassport") // ✅ Read Passport Data public String readPassport(@RequestBody Map requestData) { try { String passportNo = requestData.get("documentNo"); String expiryDate = requestData.get("expiryDate"); String birthDate = requestData.get("birthDate"); if (passportNo == null || expiryDate == null || birthDate == null) { return gson.toJson(Map.of("error", "Missing parameters")); } BACKeySpec bacKey = new BACKey(passportNo, birthDate, expiryDate); Map passportData = readPassportData(bacKey); return gson.toJson(passportData); } catch (Exception e) { return gson.toJson(Map.of("error", "Failed to read passport", "details", e.getMessage())); } } // 📌 Convert JP2 to JPEG and Base64 private static String convertJP2ToBase64(byte[] jp2Bytes) { try { ByteArrayInputStream bais = new ByteArrayInputStream(jp2Bytes); BufferedImage image = ImageIO.read(new MemoryCacheImageInputStream(bais)); if (image == null) { throw new IOException("❌ Failed to decode JP2 image."); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos); // Convert to JPEG return Base64.getEncoder().encodeToString(baos.toByteArray()); } catch (IOException e) { System.err.println("❌ JP2 conversion failed: " + e.getMessage()); return ""; } } // 📌 Read Passport Data from ACS Smart Card Reader private Map readPassportData(BACKeySpec bacKey) { Map passportData = new HashMap(); try { CardService cardService = connectACSReader(); cardService.open(); PassportService service = new PassportService(cardService, PassportService.NORMAL_MAX_TRANCEIVE_LENGTH, PassportService.DEFAULT_MAX_BLOCKSIZE, true, false); service.open(); service.sendSelectApplet(false); service.doBAC(bacKey); // 📌 Read MRZ Info (Name, Surname, DOB, etc.) CardFileInputStream dg1In = service.getInputStream(PassportService.EF_DG1); DG1File dg1File = new DG1File(dg1In); MRZInfo mrzInfo = dg1File.getMRZInfo(); passportData.put("Name", mrzInfo.getSecondaryIdentifier().replace(" Подробнее здесь: [url]https://stackoverflow.com/questions/79401982/why-i-cant-display-base64-with-my-converter[/url]