关于java后台图片的前端显示

一,前端的图片显示都是读取数据流后在前端显示的,一般我们通过地址 找到图片文件然后读取,在前端读取的依然还是数据流

。所以我们直接返回图片数据流给前端也是能够解析显示的。当我们要对后台的图片进行一些操作再在前端显示时可以用到。

如:下面是图片加水印的工具类
/*******************************************************************************
 * Description: 图片水印工具类
 * 
 * @author zhangdi
 * @version 1.0
 */
/**
 * @author Administrator
 *
 */
public class ImageRemarkUtil {
    // 水印透明度
    private static float alpha = 0.8f;
    // 水印横向位置
    private static int positionWidth = 1550;
    // 水印纵向位置
    private static int positionHeight = 1050;
    // 水印文字字体
    private static Font font = new Font("宋体", Font.BOLD, 72);
    // 水印文字颜色
    private static Color color = Color.red;

    /**
     * 
     * @param alpha
     *            水印透明度
     * @param positionWidth
     *            水印横向位置
     * @param positionHeight
     *            水印纵向位置
     * @param font
     *            水印文字字体
     * @param color
     *            水印文字颜色
     */
    public static void setImageMarkOptions(float alpha, int positionWidth, int positionHeight, Font font, Color color) {
        if (alpha != 0.0f)
            ImageRemarkUtil.alpha = alpha;
        if (positionWidth != 0)
            ImageRemarkUtil.positionWidth = positionWidth;
        if (positionHeight != 0)
            ImageRemarkUtil.positionHeight = positionHeight;
        if (font != null)
            ImageRemarkUtil.font = font;
        if (color != null)
            ImageRemarkUtil.color = color;
    }

    /**
     * 给图片添加水印图片
     * 
     * @param iconPath
     *            水印图片路径
     * @param srcImgPath
     *            源图片路径
     */
    public static BufferedImage markImageByIcon(String iconPath, String srcImgPath) {
        OutputStream os = null;
        try {
            System.out.println("水印图:"+iconPath);
            if(!new File(srcImgPath).exists()){
                return null;
            }
            Image srcImg = ImageIO.read(new File(srcImgPath));
            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null),
                    BufferedImage.TYPE_INT_RGB);
            int width = buffImg.getWidth();// 源图片的宽
            int height = buffImg.getHeight();// 源图片的高
            int imgwidth = (int) (width * 0.15);// 水印图片的宽
            int imgheight = (int) (height * 0.1);// 水印图片的高度
            positionWidth = (int) (width - imgwidth - width * 0.03);// 水印的位置所在的宽度
            positionHeight = (int) (height - imgheight - height * 0.03);// 水印的位置所在的高度
            // 1、得到画笔对象
            Graphics2D g = buffImg.createGraphics();

            // 2、设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

            g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0,
                    0, null);

            // 获取适合图片大小的水印图片
            Image img = ImageIO.read(new File(iconPath));
            BufferedImage buffImge = new BufferedImage(img.getWidth(null), img.getHeight(null),
                    BufferedImage.TYPE_INT_RGB);

            // 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度
            ImageIcon imgIcon = new ImageIcon(iconPath);

            // 5、得到Image对象。
            Graphics2D go = buffImge.createGraphics();// 初始化画笔

            img = img.getScaledInstance(imgwidth, imgheight, Image.SCALE_DEFAULT);// 改变水印图片大小

            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));// 设置透明度
            go.drawImage(img, 0, 0, null); // 绘制缩小后的图
            // 6、水印图片的位置
            g.drawImage(img, positionWidth, positionHeight, null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            // 7、释放资源
            g.dispose();
            go.dispose();
            System.out.println("图片完成添加水印图片");
            return buffImg;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != os)
                    os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

二,图片流回参时,是直接将图片流响应给respons 域里的

buffimg:图片流数据。

ImageIO.write(buffImg, "JPEG", response.getOutputStream());// 将文件流放入response中

响应到前台后接口便会响应数据流给前端;

最终的结果就是在标签的 src 属性上的图片路径被后台接口代替了。显示的就是接口处理过得图片了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java后台接收前端对象数组,你可以使用以下步骤: 1. 在前端,将对象数组转换为JSON字符串,然后通过POST请求将数据发送到后台。你可以使用JavaScript中的`JSON.stringify()`方法将对象数组转换为JSON字符串。 2. 在后台,创建一个与前端对象对应的Java类。确保该类具有与前端对象相匹配的属性和构造函数。 3. 在后台,创建一个接收POST请求的Controller或Servlet。使用合适的框架和方法来处理HTTP请求。 4. 在后台,使用JSON解析库(如Jackson、Gson等)将接收到的JSON字符串转换为Java对象数组。根据你使用的框架和库,可以在Controller或Servlet中使用注解来绑定请求参数。 5. 在后台,通过处理程序对接收到的对象数组进行进一步的操作或存储。 以下是一个示例代码: ```java // 前端发送的JSON数据格式:[{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}] // 前端对象对应的Java类 public class MyObject { private int id; private String name; // 省略getter和setter方法 } // 后台接收请求的Controller @RestController public class MyController { @PostMapping("/objects") public void receiveObjects(@RequestBody MyObject[] objects) { // 对接收到的对象数组进行进一步操作或存储 for (MyObject object : objects) { System.out.println(object.getId() + ": " + object.getName()); } } } ``` 在这个示例中,前端将一个包含两个对象的对象数组发送到`/objects`路径。后台的`MyController`类通过`@PostMapping`注解接收POST请求,并使用`@RequestBody`注解将接收到的JSON字符串转换为`MyObject`对象数组。然后,你可以对这些对象进行进一步的操作或存储。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值