• 大小: 4KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Java
  • 标签: zpl  图片  编码  

资源简介

实现思路: 1、获取图片的二值化字节数组 这一步是关键 2、将字节数组转为十六进制 3、压缩十六进制字符串 结尾为1、0或者与上一行相同的;相同的连续字符压缩 4、拼凑ZPL编码,宽度需要扩大,因为需要时8个点(1字节)的整数倍

资源截图

代码片段和文件信息

package image;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.IOException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 在 erp中单独使用
 * 实现思路:
 * 1、获取图片的二值化字节数组 这一步是关键
 * 2、将字节数组转为十六进制
 * 3、压缩十六进制字符串 结尾为1、0或者与上一行相同的;相同的连续字符压缩
 * 4、拼凑ZPL编码,宽度需要扩大,因为需要时8个点(1字节)的整数倍
 * Created by guzy on 17/11/12.
 */
public class Image2Zpl {

    static Pattern ZEROS=Pattern.compile(“0+$“)ONES=Pattern.compile(“1+$“)MULTI_W=Pattern.compile(“([0-9A-Z])\\1{2}“);

    public static void main(String[] args) throws IOException {
        System.out.println(“^XA“+image2Zpl(ImageIO.read(new URL(“http://jxc-storage.oss-cn-shanghai.aliyuncs.com/0cac85f28e42f6f811fc63b4067cae21.jpg“)))+“^XZ“);
    }

    public static String image2Zpl(BufferedImage image) {
        //获取图片的字节数组
        DataBufferByte data=(DataBufferByte) getBinaryGrayImage(image).getRaster().getDataBuffer();
        byte[] imgData=data.getData();

        int newW=(image.getWidth()+7)/8;//实际每行字节大小,8个点,每个点1位,共8位
        String[] strs=byte2HexStr(imgDatanewW);
        int bytes=imgData.length;
        return String.format(“^XA^GFA%d%d%d%s^FS^XZ“ bytes bytes newW compress(strs));
    }


    /**
     * 获取二值化图,并取反
     * @param srcImage
     * @return
     */
    private static BufferedImage getBinaryGrayImage(BufferedImage srcImage) {
        BufferedImage dstImage = new BufferedImage(srcImage.getWidth() srcImage.getHeight() BufferedImage.TYPE_BYTE_BINARY);
        dstImage.getGraphics().drawImage(srcImage 0 0 null);
        for (int y = 0; y < dstImage.getHeight(); y++) {
            for (int x = 0; x < dstImage.getWidth(); x++) {
                Color color = new Color(dstImage.getRGB(x y));
                //获取该点的像素的RGB的颜色
                Color newColor = new Color(255 - color.getRed() 255 - color.getGreen() 255 - color.getBlue());
                dstImage.setRGB(x 

评论

共有 条评论