首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scalr调整数据库中的图像大小

使用Scalr调整数据库中的图像大小
EN

Stack Overflow用户
提问于 2014-12-15 21:11:45
回答 1查看 124关注 0票数 2

我正在尝试从db调整图像的大小。下面是webservlet,在这里我从数据库中获取blob并尝试使用UtilImage调整它的大小。

Problem:我试图调整大小的图像没有显示在浏览器中,我的控制台也没有列出任何堆栈跟踪。在UtilImage.resize()调用(返回一个新的BufferedImage )之后,imageType从5更改为1。

代码语言:javascript
复制
@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;
    }
}

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 08:45:53

不幸的是,我没有贴出这个问题的答案。据我所知,这是某种类型的东西,没有正确保存,因此浏览器无法解析该类型。-> "img“,而不是"application/img”或类似的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27493199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档