Изменение размера изображения из базы данных с помощью Scalr
Я пытаюсь изменить размер изображения с помощью БД. Ниже приведен веб-сервлет, в котором я получаю блоб из своей базы данных и пытаюсь изменить его размер с помощью UtilImage.
Проблема: изображение, которое я пытался изменить, не отображается в моем браузере, и моя консоль не содержит никаких следов стека. После UtilImage.resize()
вызов, который возвращает новый BufferedImage, imageType изменился с 5 на 1.
@WebServlet("/images")
public class BildService extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
private LesenService lesenService;
private Veranstaltung veranstaltung;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer veranstaltungId = Integer.parseInt(request.getParameter("id"));
veranstaltung = lesenService.getVeranstaltungByVeranstaltungId(veranstaltungId);
if (veranstaltung == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
response.setContentType(veranstaltung.getFormat());
OutputStream os = response.getOutputStream();
byte[] img = UtilImage.resizeScalr(veranstaltung.getBild(), veranstaltung.getFormat());
os.write(img);
}
}
This is my UtilImage class:
public class UtilImage {
public static final byte[] resizeScalr(byte[] img, String type) {
if (img != null) {
BufferedImage bImage = getBufferedImage(img);
double scaleFactor = getScaleFactor(bImage.getWidth(), UtilKonstanten.PICTURE_WIDTH);
int targetWidth = (int) (scaleFactor * bImage.getWidth());
int targetHeight = (int) (scaleFactor * bImage.getHeight());
// return getByteArray(Scalr.resize(bImage, targetWidth,
// targetHeight), type);
return getByteArray(Scalr.resize(bImage, Scalr.Method.BALANCED, targetWidth, targetHeight), type);
}
return null;
}
private static final double getScaleFactor(int width, int wishwidth) {
return (double) wishwidth / width;
}
private static final BufferedImage getBufferedImage(byte[] array) {
InputStream is = new ByteArrayInputStream(array);
BufferedImage img;
try {
img = ImageIO.read(is);
return img;
} catch (IOException e) {
// TODO
e.printStackTrace();
}
return null;
}
private static final byte[] getByteArray(BufferedImage img, String type) {
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(img, type, os);
byte[] byteArray = os.toByteArray();
os.close();
return byteArray;
} catch (IOException e) {
// TODO
e.printStackTrace();
}
return null;
}
}
Большое спасибо за вашу помощь!
1 ответ
Решение
К сожалению, я не опубликовал ответ на этот вопрос. Насколько я знаю, это было что-то с типом, которое не было сохранено правильно, и из-за этого браузер не смог определить тип. -> "img" вместо "application/img" или что-то в этом роде.