精华内容
下载资源
问答
  • 该绘图技术,需要开启php的一个扩展:GD2,该扩展提供了很多绘制图像的方法 PHP的图像处理技术的应用场景: 验证码(在图像上面绘制一些文字,人类很容易辨别出来,但是计算机脚本以目前的技术辨别图像中的字符是...

         第1章 php图像处理技术

    1.1 图像处理基本介绍

    所谓的PHP图像处理技术,就是通过php的函数进行绘制图像,然后可以输出到浏览器,也可以保存到本地

    该绘图技术,需要开启php的一个扩展:GD2,该扩展提供了很多绘制图像的方法

    PHP的图像处理技术的应用场景:

    验证码(在图像上面绘制一些文字,人类很容易辨别出来,但是计算机脚本以目前的技术辨别图像中的字符是有很大的难度)

    图像的压缩(;例如上传头像时,本地的图片很大,但是上传到服务器之后,会针对大图进行压缩处理)

     

    1.2 php绘图坐标体系

    在编程世界中坐标体系和我们上学时数学里面的坐标体系不一样的

     

     

    1.3 php绘图的基本步骤

    (1) 先开启phpgd扩展,该扩展里面提供了很多绘图函数

    打开php.ini配置文件

    重启apache服务器

    写一个phpinfo函数,测试一下

     

    (2) 开始绘制图像

     

    1. 先在内存中,创建图像资源(理解成画布):imagecreatetruecolor
    2. 给画布分配颜色(默认画布的颜色是真空的黑色):imagecolorallocate()
    3. 给画笔分配颜色 imagecolorallocate
    4. 开始绘制 imageline
    5. 直接在浏览器输出、保存到本地:header()   imagepng()
    6. 销毁画布资源 imagedestroy()

     

    1.4 php绘图的具体演示

    (1)绘制线条  imageline()

    (2)绘制三角形:imageline()

     

    (3)绘制矩形:imagerectangle()imagefilledrectangle()

    描边矩形:imagerectangle()

    填充矩形:imagefilledrectangle()

     

    (4)绘制圆形 椭圆形:imageellipse() imagefilledellipse()

    描边圆形:imageellipse

    填充圆形:imagefilledellipse

    (5)将图片绘制到画布上:imagecopy()

     

    (6)绘制字符串:imagestring()

     

    (7)绘制文字:imagettftext()

    指定使用哪个字体来绘制文字

    (8)绘制弧形:imagearc()

    说明:三点钟的位置是起点(0度)

     

     

    1.5 php绘图小作业

    绘制小乌龟(可选的作业

     

     

    1.6 课后练习题

    将某个文件夹下面所有的图片,批量打上泰牛泰牛,越学越牛水印

    提示:scandir()  遍历某个目录下面的所有文件、子目录

     


     

         第2章 php图像处理技术应用

    2.1 验证码的使用

    验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、注册刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

     

    2.2 封装验证码类

    (1)封装一个验证码类,先实现能够随机生成不同颜色的背景

     

     

    (2)在生成的图片上面随机的产生文字(字母、数字)

    由于随机生成字符的代码肯定会很多,所以我们将生成字符的代码封装到函数中

     

    (3)把随机生成的字符写入到画布中

    使用imagettftext()写入,因为可以指定字体文件

    如何实现让每个字符所在的位置不一样,倾斜的角度也不一样?
    思路:遍历这4个字符,指定每一个字符的位置、倾斜的角度

     

    //开始绘制验证码
        public function makeImage()
        {
            //1. 创建画布,背景颜色应该是随机产生的,尽量背景颜色浅一点
            $image = imagecreatetruecolor($this->width, $this->height);
            //2. 分配颜色        
            $color = imagecolorallocate($image, mt_rand(100,255), mt_rand(100,255), mt_rand(100,255));
            imagefill($image, 0, 0, $color);
            
            //3. 开始绘制文字
            $code = $this->makeCode();
            for($i=0;$i<strlen($code);$i++){
                imagettftext($image, $this->font_size, mt_rand(-30,30), ($this->width/$this->number)*$i+5, 20, mt_rand(0,100), $this->font_file, $code[$i]);  
            }        
            //绘制100个干扰像素点
            for($i=0;$i<100;$i++){
                imagesetpixel($image, mt_rand(0,$this->width), mt_rand(0,$this->height), mt_rand(0,100));
            }
            
            //练习:绘制10条干扰线条
            
            //3. 输出到浏览器
            header("Content-Type:image/png");
            imagepng($image);
            //4. 销毁图像资源
            imagedestroy($image);
        }

     

    4)给画布增加一些干扰像素、干扰线条 

     

    2.3 将验证码类应用到案例中

     

    首先我们先创建一个表单:

     

    当我们提交表单的时候,拿用户输入的验证码    我们生成的验证码进行比较

    如何将生成的验证码保存起来?

    需要使用到会话技术:SESSION技术

     


     

         第3章 php图像压缩处理

    3.1 图像压缩介绍

    我们之前学习过文件的上传(上传一个头像),但是上传的文件不能直接使用的,因为本地的文件可能会很大,在前端页面显示的时候,就会加载很长时间,所以我们通常会先压缩再使用

    通常压缩的时候,一般是按照等比例压缩,所谓的等比例压缩就是宽度、高度同时压缩相同的比例,在实际开发的时候,我们通常会根据具体的需要(前端页面的需求)在指定的范围内进行等比例压缩

     

    3.2 图像压缩入门案例

    图像压缩非常简单,就是一个php的图像处理函数:imagecopyresampled

    该函数有10个参数:

    <?php
    //制作缩略图、图像压缩
    //参数1:目的地图像资源(通常指的是画布资源)
    $dst_image = imagecreatetruecolor(100, 100);
    $color = imagecolorallocate($dst_image, 22, 139, 0);
    imagefill($dst_image, 0, 0, $color);
    //参数2:原图资源(将该图片资源压缩之后,再保存到目的地画布中)
    $src_image = imagecreatefrompng('bs.png');
    //参数3、4:目的地(画布的起点坐标)
    $dst_x = 0;
    $dst_y = 0;
    //参数5、6:原图的(起点坐标)
    $src_x = 0;
    $src_y = 0;
    //参数7、8:目的地(画布的宽度、高度)
    $dst_w = 100;
    $dst_h = 100;
    //参数9、10:原图的宽度、高度
    //通过imagesx()函数获得图像资源的宽度、imagesy()获得图像资源的高度
    
    $src_w = imagesx($src_image);
    $src_h = imagesy($src_image);
    imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    
    //可以保存、也可以输出到浏览器
    //1. 直接在浏览器输出
    header("Content-Type:image/png");
    imagepng($dst_image);
    
    //2. 保存到本地,只需要给imagepng()函数增加第二个参数(保存地址)即可
    //imagepng($dst_image,'./thumb_bs.png');

     

    3.3 图像等比例压缩

     假设我们缩放10

    但是上面的代码,如果应用到下面的场景中,就不太灵活

     

    所以我们要实现:在上面场景中的范围中,生成一个最优的压缩图像

     

    3.4 图像压缩处理类

    因为主流的编程思想是:OOP面向对象编程,文件的最新单位是类

    思考:

    有哪些属性:

    原图文件

    压缩文件保存的地址

     

    有哪些成员方法:

    制作压缩图像的方法

     

     

    3.5 完善压缩处理类(支持主流的图像类型(jpg、png、gif))

    Jpg -> imagecreatefromjpeg()

    Pngàimagecreatefrompng()

    Gif-àimagecreatrefromgif()

     

    保存图像的时候:

    Png---àimagepng()

    Gif----àimagegif()

    Jpg--àimagejpeg()

     

    所以我们先定义属性分别保存创建图像资源、保存图像的函数,将来再通过图像的类型找到对应的创建、生成函数

     

    如何获得图像资源的mime类型呢?

    Getimagesize函数可以获得图像资源的大小、图像的mime类型

    演示:

     

    由于我们之前保存了图像的mime类型创建图像资源函数之间的映射关系,所以我们只需要获得图像的mime类型,即可获得创建、生成保存的函数

    我们就将这个初始化的操作写到构造函数中,因为构造函数就是用来初始化一些属性、值得

     

    完整代码参考:Thumb.class.php类文件

    这里省略一部分代码,详细请参考:Thumb.class.php

    下一步,根据mime类型,找到对应的函数:

     

    再找到保存图像资源的函数:

     

     

    png图像背景都是透明的
    使用imagecolortransparent()进行透明化处理

     

     

     3.6 小结

    图像压缩:imagecopyresampled

    图片在指定范围内压缩:

    1000*800   50*50 比例==20,宽的部分压缩的比例

    800*1000      50*50     比例==20,高度部分压缩的比例

     

    兼容主流的图像格式(i=mage/pngimage/jpegimage/gif

    每个格式对应一个创建图像资源、保存图像资源的函数:

    image/png  ------------à   imagecreatefrompng

    ....

    先在构造函数中初始化文件类型、再通过mime类型找到对应的函数

     

    解决背景透明:

    $color = imagecolorallocate($image,255,255,255);

    $color  = imagecolortransparent($image,$color);

     

      3.7 文件上传、图像压缩综合联系

     先上传文件,上传成功之后,将图像进行压缩处理

     

    转载于:https://www.cnblogs.com/qianjilou/p/6932863.html

    展开全文
  • 绘制一个矩形添加字符串“My name is XXXX”(姓名的全拼),画布尺寸300×200,矩形尺寸、颜色自己定义,字符串要显示在矩形的正中间。生成jpg格式的文件
  • java生成一维码和二维码

    千次阅读 2017-10-31 11:23:22
    这两天想了解一下二维码是怎样生成的。然后在网上看了很多资料,也有很多源码可以...将包导入好项目之后就可以开始写代码了,先来谈谈一个简单的生成二维码和一维码。想直接使用的可以复制代码之直接可以用。 下面是

    这两天想了解一下二维码是怎样生成的。然后在网上看了很多资料,也有很多源码可以直接用的。我也没有自己写,也是拿着源码进行看和修改的,然后生成自己想要的二维码和一维码,还是很不错的,所以分享一下。
    首先第一步,需要导入jar包,我把我用的jar包放上来吧

    jar包下载链接:http://download.csdn.net/download/qq_27790011/10046325

    将包导入好项目之后就可以开始写代码了,先来谈谈一个简单的生成二维码和一维码。想直接使用的可以复制代码之直接可以用。
    下面是MatrixUtil 类,全部生成一维码和二维码的方法都在里面,不过都是生成最简单的样式,样式可以自己修改。

    package com.zlf.qrcode2;
    
    import com.google.zxing.BarcodeFormat; 
    import com.google.zxing.BinaryBitmap; 
    import com.google.zxing.DecodeHintType; 
    import com.google.zxing.EncodeHintType; 
    import com.google.zxing.LuminanceSource; 
    import com.google.zxing.MultiFormatReader; 
    import com.google.zxing.MultiFormatWriter; 
    import com.google.zxing.Result; 
    import com.google.zxing.WriterException; 
    //import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 
    import com.google.zxing.common.BitMatrix; 
    import com.google.zxing.common.HybridBinarizer; 
    
    import javax.imageio.ImageIO; 
    
    import java.io.File; 
    import java.io.OutputStream; 
    import java.io.IOException; 
    import java.util.Hashtable; 
    import java.awt.image.BufferedImage; 
    
    /**
     * 使用ZXing2.3,生成条码的辅助类。可以编码、解码。编码使用code包,解码需要javase包。
     */ 
    public final class MatrixUtil { 
    
        private static final String CHARSET = "utf-8"; 
        private static final int BLACK = 0xFF000000; 
        private static final int WHITE = 0xFFFFFFFF; 
    
        /**
         * 禁止生成实例,生成实例也没有意义。
         */ 
        private MatrixUtil() { 
        } 
    
        /**
         * 生成矩阵,是一个简单的函数,参数固定,更多的是使用示范。   
         * @param text
         * @return
         */ 
        public static BitMatrix toQRCodeMatrix(String text, Integer width, 
                Integer height) { 
            if (width == null || width < 300) { 
                width = 300; 
            } 
    
            if (height == null || height < 300) { 
                height = 300; 
            } 
            // 二维码的图片格式 
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); 
            // 内容所使用编码 
            hints.put(EncodeHintType.CHARACTER_SET, CHARSET); 
            BitMatrix bitMatrix = null; 
            try { 
                bitMatrix = new MultiFormatWriter().encode(text, 
                        BarcodeFormat.QR_CODE, width, height, hints); 
            } catch (WriterException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            // 生成二维码 
            // File outputFile = new File("d:"+File.separator+"new.gif"); 
            // MatrixUtil.writeToFile(bitMatrix, format, outputFile); 
            return bitMatrix; 
        } 
    
        /**
         * 将指定的字符串生成二维码图片。简单的使用示例。    
         * @param text
         * @param file
         * @param format
         * @return
         */ 
        public boolean toQrcodeFile(String text, File file, String format) { 
            BitMatrix matrix = toQRCodeMatrix(text, null, null); 
            if (matrix != null) { 
                try { 
                    writeToFile(matrix, format, file); 
                    return true; 
                } catch (IOException e) { 
                    // TODO Auto-generated catch block 
                    e.printStackTrace(); 
                } 
            } 
            return false; 
        } 
    
        /**
         * 根据点矩阵生成黑白图。 
         */ 
        public static BufferedImage toBufferedImage(BitMatrix matrix) { 
            int width = matrix.getWidth(); 
            int height = matrix.getHeight(); 
            BufferedImage image = new BufferedImage(width, height, 
                    BufferedImage.TYPE_INT_RGB); 
            for (int x = 0; x < width; x++) { 
                for (int y = 0; y < height; y++) { 
                    image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); 
                } 
            } 
            return image; 
        } 
    
        /**
         * 将字符串编成一维条码的矩阵  
         * @param str
         * @param width
         * @param height
         * @return
         */ 
        public static BitMatrix toBarCodeMatrix(String str, Integer width, 
                Integer height) { 
    
            if (width == null || width < 200) { 
                width = 200; 
            } 
    
            if (height == null || height < 50) { 
                height = 50; 
            } 
    
            try { 
                // 文字编码 
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); 
                hints.put(EncodeHintType.CHARACTER_SET, CHARSET); 
    
                BitMatrix bitMatrix = new MultiFormatWriter().encode(str, 
                        BarcodeFormat.CODE_128, width, height, hints); 
    
                return bitMatrix; 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
            return null; 
        } 
    
        /**
         * 根据矩阵、图片格式,生成文件。
         */ 
        public static void writeToFile(BitMatrix matrix, String format, File file) 
                throws IOException { 
            BufferedImage image = toBufferedImage(matrix); 
            if (!ImageIO.write(image, format, file)) { 
                throw new IOException("Could not write an image of format " 
                        + format + " to " + file); 
            } 
        } 
    
        /**
         * 将矩阵写入到输出流中。
         */ 
        public static void writeToStream(BitMatrix matrix, String format, 
                OutputStream stream) throws IOException { 
            BufferedImage image = toBufferedImage(matrix); 
            if (!ImageIO.write(image, format, stream)) { 
                throw new IOException("Could not write an image of format " 
                        + format); 
            } 
        } 
    
        /**
         * 解码,需要javase包。
         * @param file
         * @return
         */ 
        /*public static String decode(File file) { 
    
            BufferedImage image; 
            try { 
                if (file == null || file.exists() == false) { 
                    throw new Exception(" File not found:" + file.getPath()); 
                } 
    
                image = ImageIO.read(file); 
    
                LuminanceSource source = new BufferedImageLuminanceSource(image); 
                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 
    
                Result result; 
    
                // 解码设置编码方式为:utf-8, 
                Hashtable hints = new Hashtable(); 
                hints.put(DecodeHintType.CHARACTER_SET, CHARSET); 
    
                result = new MultiFormatReader().decode(bitmap, hints); 
    
                return result.getText(); 
    
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
    
            return null; 
        } */
    } 
    

    接下来是Test测试类,代码更简单。

    package com.zlf.qrcode2;
    
    import java.io.File; 
    
    public class Test {   
    
        /**
         * 测试函数。简单地将指定的字符串生成二维码图片。
         */ 
        public static void main(String[] args) throws Exception {   
            String text = "1234567890";   
            String result; 
            String format = "jpg";   
            //生成二维码   
            File outputFile = new File("j:"+File.separator+"rqcode.jpg");   
            MatrixUtil.writeToFile(MatrixUtil.toQRCodeMatrix(text, null, null), format, outputFile);   
            System.out.println("success1");
            //result = MatrixUtil.decode(outputFile); 
            //System.out.println(result); 
              //生成条形码 
            outputFile = new File("j:"+File.separator+"barcode.jpg");   
            MatrixUtil.writeToFile(MatrixUtil.toBarCodeMatrix(text, null, null), format, outputFile); 
            System.out.println("success2");
            //result = MatrixUtil.decode(outputFile); 
            //System.out.println(result); 
        }   
    
    }   

    一维码和二维码效果图
    这里写图片描述

    这里写图片描述

    接下来主要讲一下二维码的生成吧,因为现在二维码比较火,动不动就手机扫一扫。为了制作一个稍微有特点的二维码。我另起了一个项目,不过jar包还是通用的。然后有这几个类。MatrixToImageWriter类QRCodeFactory类和测试类Qrest

    MatrixToImageWriter类主要的功能也是生成二维码图片

    package com.zlf.qrcode;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    import javax.imageio.ImageIO;
    import com.google.zxing.common.BitMatrix;
    
    /*
      二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类直接拷贝到源码中使用,当然你也可以自己写个
      生产条形码的基类
     */
    public class MatrixToImageWriter {
        private static final int BLACK = 0xFF000000;//用于设置图案的颜色
        private static final int WHITE = 0xFFFFFFFF; //用于背景色
    
        private MatrixToImageWriter() {
        }
    
        public static BufferedImage toBufferedImage(BitMatrix matrix) {
            int width = matrix.getWidth();
            int height = matrix.getHeight();
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    image.setRGB(x, y,  (matrix.get(x, y) ? BLACK : WHITE));
    //                image.setRGB(x, y,  (matrix.get(x, y) ? Color.YELLOW.getRGB() : Color.CYAN.getRGB()));
                }
            }
            return image;
        }
    
        public static void writeToFile(BitMatrix matrix, String format, File file,String logUri) throws IOException {
    
            System.out.println("write to file");
            BufferedImage image = toBufferedImage(matrix);
            //设置logo图标
            QRCodeFactory logoConfig = new QRCodeFactory();
            image = logoConfig.setMatrixLogo(image, logUri);
    
            if (!ImageIO.write(image, format, file)) {
                System.out.println("生成图片失败");
                throw new IOException("Could not write an image of format " + format + " to " + file);
            }else{
                System.out.println("图片生成成功!");
            }
        }
    
        public static void writeToStream(BitMatrix matrix, String format, OutputStream stream,String logUri) throws IOException {
    
            BufferedImage image = toBufferedImage(matrix);
    
            //设置logo图标
            QRCodeFactory logoConfig = new QRCodeFactory();
            image = logoConfig.setMatrixLogo(image, logUri);
    
            if (!ImageIO.write(image, format, stream)) {
                throw new IOException("Could not write an image of format " + format);
            }
        }
    }

    QRCodeFactory类的功能主要是编写自己特定制作,比如给二维码添加一个logo,给二维码添加文字说明。

    package com.zlf.qrcode;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.Hashtable;
    
    import javax.imageio.ImageIO;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    /**
     * 本类用于对我们二维码进行参数的设定,生成我们的二维码:
     * @author kingwen
     */
    public class QRCodeFactory {
    
        /**
         * 给生成的二维码添加中间的logo
         * @param matrixImage 生成的二维码
         * @param logUri      logo地址
         * @return            带有logo的二维码
         * @throws IOException logo地址找不到会有io异常
         */
         public BufferedImage setMatrixLogo(BufferedImage matrixImage,String logUri) throws IOException{
             /**
              * 读取二维码图片,并构建绘图对象
              */
             Graphics2D g2 = matrixImage.createGraphics(); 
             int matrixWidth = matrixImage.getWidth();
             int matrixHeigh = matrixImage.getHeight();
    
             /**
              * 读取Logo图片
              */
             BufferedImage logo = ImageIO.read(new File(logUri));
    
             //开始绘制图片
             g2.drawImage(logo,matrixWidth/5*2,matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5, null);
             //绘制边框 
             BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); 
             // 设置笔画对象
             g2.setStroke(stroke);
             //指定弧度的圆角矩形
             RoundRectangle2D.Float round = new RoundRectangle2D.Float(matrixWidth/5*2, matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5,20,20);
             g2.setColor(Color.white);
             // 绘制圆弧矩形
             g2.draw(round);
    
             //设置logo 有一道灰色边框
             BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); 
             // 设置笔画对象
             g2.setStroke(stroke2);
             RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(matrixWidth/5*2+2, matrixHeigh/5*2+2, matrixWidth/5-4, matrixHeigh/5-4,20,20);
             g2.setColor(new Color(128,128,128));
             g2.draw(round2);// 绘制圆弧矩形
    
    
             Font font = new Font("Freestyle Script", Font.BOLD, 80);
             g2.setFont(font);
             g2.drawString("my love", matrixWidth/5*1+50, matrixHeigh/5*4-10);
    
    
             g2.dispose();
             matrixImage.flush() ;
             return matrixImage ;
    
         }
    
    
    
         /**
          * 创建我们的二维码图片
          * @param content            二维码内容
          * @param format             生成二维码的格式
          * @param outFileUri         二维码的生成地址
          * @param logUri             二维码中间logo的地址
          * @param size               用于设定图片大小(可变参数,宽,高)
          * @throws IOException       抛出io异常
          * @throws WriterException   抛出书写异常
          */
         public  void CreatQrImage(String content,String format,String outFileUri,String logUri, int ...size) throws IOException, WriterException{
    
    
            int width = 430; // 二维码图片宽度 430 
             int height = 430; // 二维码图片高度430    
    
             //如果存储大小的不为空,那么对我们图片的大小进行设定
            if(size.length==2){
            width=size[0];
            height=size[1];
            }else if(size.length==1){
               width=height=size[0];
            }
    
    
             Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
              // 指定纠错等级,纠错级别(L 7%、M 15%、Q 25%、H 30%)
             hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
             // 内容所使用字符集编码
             hints.put(EncodeHintType.CHARACTER_SET, "utf-8");    
            //hints.put(EncodeHintType.MAX_SIZE, 350);//设置图片的最大值
            //hints.put(EncodeHintType.MIN_SIZE, 100);//设置图片的最小值
             hints.put(EncodeHintType.MARGIN, 1);//设置二维码边的空度,非负数
    
             BitMatrix bitMatrix = new MultiFormatWriter().encode(content,//要编码的内容
                     //编码类型,目前zxing支持:Aztec 2D,CODABAR 1D format,Code 39 1D,Code 93 1D ,Code 128 1D,
                     //Data Matrix 2D , EAN-8 1D,EAN-13 1D,ITF (Interleaved Two of Five) 1D,
                     //MaxiCode 2D barcode,PDF417,QR Code 2D,RSS 14,RSS EXPANDED,UPC-A 1D,UPC-E 1D,UPC/EAN extension,UPC_EAN_EXTENSION
                     BarcodeFormat.QR_CODE,
                     width, //条形码的宽度
                     height, //条形码的高度
                     hints);//生成条形码时的一些配置,此项可选
    
             // 生成二维码图片文件
             File outputFile = new File(outFileUri);
    
             //指定输出路径    
             System.out.println("输出文件路径为"+outputFile.getPath());
    
             MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile,logUri);
         }   
    }
    

    接下来就是测试Qrest类了,

    package com.zlf.qrcode;
    
    
    import java.io.IOException;
    
    import com.google.zxing.WriterException;
    
    public class Qrest {
    
        public static void main(String[] args) {
    
            String content="我莫名奇妙的笑了,只因为想到了你。";
           String logUri="J:/logs/1.jpg"; //J:\\logs\\author.jpg
           String outFileUri="J:/logs/qtCode1.jpg";
           int[]  size=new int[]{430,430};
           String format = "jpg";  
    
           try {
            new QRCodeFactory().CreatQrImage(content, format, outFileUri, logUri,size);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (WriterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
      }
    
    }
    

    这些代码也可以直接复制直接使用的。,现在给看一下我做出来的效果图。
    将自己的个人blog制作成二维码

    参考的文章比较多,现在也记不得网址了,就不粘出来了,如果有侵权的联系我删除。

    展开全文
  • Point表示一个2D平面的点(x, y) 用法: Point p; p.x = 20; p.y = 10; //或者 p = Point(20, 10); Scalar表示四个元素的向量 int b = 123; int g = 45; int r = 89; Scalar color = Scalar(b, g, r); 画线和...

    Point表示一个2D平面的点(x, y)

    用法:

    Point p;
    p.x = 20;
    p.y = 10;
    //或者
    p = Point(20, 10);

    Scalar表示四个元素的向量

    int b = 123;
    int g = 45;
    int r = 89;
    Scalar color = Scalar(b, g, r);

    画线和各种图形

    cv::line (LINE_4\LINE_8\LINE_AA)//画线 
    
    cv::ellipse //画椭圆
    
    cv::rectangle //画矩形
    
    cv::circle //画圆
    
    cv::fillPoly //画填充

    随机数生成cv::RNG

    1. 生成高斯随机数gaussian (double sigma)
    2. 生成正态分布随机数uniform (int a, int b)

    添加文字

    putText(img, "Hello Opencv", Point(0, 150), FONT_HERSHEY_TRIPLEX, 1.0, Scalar(50, 20, 250), 1, 8);
    //img为需要添加文字的图片,"Hello Opencv"是要添加的字符串,Point(x, y)表示从什么位置写字符串
    //FONT_HERSHEY_TRIPLEX为设置的字体,1.0为字体大小,范围(1.0 - 8.0),Scalar(b, g, r)为设定的像素值

     

    代码如下:

    #include<iostream>
    #include<opencv.hpp>
    
    using namespace cv;
    using namespace std;
    
    Mat img, dst;
    
    void lines()
    {
    	Point p1 = Point(20, 30);
    	Point p2;
    	p2.x = 100;
    	p2.y = 100;
    	Scalar color = Scalar(0, 0, 255);
    	line(img, p1, p2, color, 1, LINE_8);
    }
    
    void Rectangle()
    {
    	Rect rect = Rect(50, 50, 150, 150);
    	Scalar color = Scalar(255, 0, 255);
    	rectangle(img, rect, color, 2, LINE_8);
    }
    
    void Ellipse()
    {
    	Scalar color = Scalar(255, 128, 0);
    	//中心,长短轴,旋转度数,从0到360°画椭圆,颜色,线宽,8邻接连接线
    	ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 8), 90, 0, 360, color, 4, LINE_8);
    }
    
    void Round()
    {
    	Scalar color = Scalar(12, 220, 74);
    	Point center = Point(img.cols / 2, img.rows / 2);
    	circle(img, center, 100, color, 3, 8);
    }
    
    void Polygon()
    {
    	Point pts[1][5];
    	pts[0][0] = Point(100, 100);
    	pts[0][1] = Point(100, 200);
    	pts[0][2] = Point(200, 200);
    	pts[0][3] = Point(200, 100);
    	pts[0][4] = Point(100, 100);
    
    	const Point*ppts[] = { pts[0] };
    	int npt[] = { 5 };
    	Scalar color = Scalar(22, 55, 88);
    	fillPoly(img, ppts, npt, 1, color, 8);
    }
    
    void RandomLine()
    {
    	RNG rng(100000);
    	Point pt1, pt2;
    	int SIZE = 1000;
    	Mat demo = Mat::zeros(SIZE, SIZE, img.type());
    	namedWindow("random line image", WINDOW_AUTOSIZE);
    
    	for (int i = 0; i < 100; i++)
    	{
    		pt1.x = rng.uniform(0, SIZE);
    		pt2.x = rng.uniform(0, SIZE);
    		pt1.y = rng.uniform(0, SIZE);
    		pt2.y = rng.uniform(0, SIZE);
    
    		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
    		if (waitKey(1) > 0)
    		{
    			break;
    		}
    		line(demo, pt1, pt2, color, 1, 8);
    
    		imshow("random line image", demo);
    	}
    	imwrite("D:\\OpenCV\\images\\demo.jpg", demo);
    	printf("Drawing completion!");
    }
    
    int main(int argc, char **argv)
    {
    	img = imread("D:\\OpenCV\\images\\9.jpg");
    	if (img.empty())
    	{
    		cout << "image loading failed..." << endl;
    		return -1;
    	}
    
    	lines();//画线框
    	Rectangle();//画矩形
    	Ellipse();//画椭圆
    	Round();//画圆
    	Polygon();//画矩形填充
    	putText(img, "Hello Opencv", Point(0, 150), FONT_HERSHEY_TRIPLEX, 1.0, Scalar(50, 20, 250), 1, 8);//添加字符串
    	RandomLine();//绘制随机线段,运行一下就知道~ ~ ~
    
    	namedWindow("output", WINDOW_AUTOSIZE);
    	imshow("output", img);
    
    	waitKey(0);
    	return 0;
    }

    放几张效果图

     

                                                                 RandomLine()

     就到这里,准备睡觉~

     

    展开全文
  • php课程 8-28 php如何绘制生成显示图片 、总结 句话总结:gd库轻松解决 1、php图片操作生成的图的两种去向是什么? 种在页面直接输出,种存进本地磁盘 2、php操作图片的库有哪些? ...

    php课程 8-28 php如何绘制生成显示图片

    一、总结

    一句话总结:gd库轻松解决

     

    1、php图片操作生成的图的两种去向是什么?

    一种在页面直接输出,一种存进本地磁盘

     

    2、php操作图片的库有哪些?

    PHP: Image Processing and Generation - Manual
    http://php.net/manual/en/refs.utilspec.image.php
    Cairo
    Exif
    GD
    Gmagick
    ImageMagick

     

    3、如何防止网站强刷注册?

    a、验证码
    b、ip限制,比如这个ip只能注册30个用户,多了就让你明天再来

     

    4、如何防止网站暴力破解用户名?

    记录用户名,如果输入错5次,那只能明天再来登录
    第一次没有验证码,输入出错之后验证码就出来

     

    5、网站上面图片的缩放、裁剪、加水印是怎么实现的?

    交给的php,gd库轻松解决

     

    6、php中常见的资源类型有哪些?

    数据库连接资源
    gd库画布资源

     

    7、php变量或者说资源的释放是什么样的?

    一个脚本执行完,执行到最后之后,里面的所有变量或者说资源都会被删除,所以多个php脚本的重复变量是不会相互影响的。

     

    8、html如何声明本文档是图片?

    header头中content-type

    header('content-type:image/jpeg');

     

    9、gd库的使用需要额外引包么?

    不需要,直接进去就开始干就行了,比如说创建画布资源

     1 <?php 
     2 // 1.创建画布资源
     3 $img=imagecreatetruecolor(500,300);
     4 
     5 // 2.准备颜色
     6 $black=imagecolorallocate($img,0,0,0);
     7 $white=imagecolorallocate($img,255,255,255);
     8 $red=imagecolorallocate($img,255,0,0);
     9 $green=imagecolorallocate($img,0,255,0);
    10 $blue=imagecolorallocate($img,0,0,255);
    11 
    12 // 3.填充画布
    13 imagefill($img,0,0,$black);
    14 
    15 // 4.在画布上画图像或文字
    16 imagefilledellipse($img,250,150,200,200,$white);
    17 
    18 // 5.输出最终图像或保存最终图像
    19 header('content-type:image/jpeg');
    20 
    21 // 图片从浏览器上输出
    22 imagejpeg($img);
    23 
    24 // 把图片保存到本地
    25 // imagejpeg($img,'jin.jpg');
    26 
    27 // 6.释放画布资源
    28 imagedestroy($img);
    29 
    30  ?>

     

    10、php中gd画图的场景有哪些?

    1.验证码
    2.缩放
    3.裁剪
    4.水印

     

    11、php中创建图像的六个步骤是什么?

    1.创建画布资源
    $img=imagecreatetruecolor(500,300);

    2.准备颜色
    $black=imagecolorallocate($img,0,0,0);
    $white=imagecolorallocate($img,255,255,255);
    $red=imagecolorallocate($img,255,0,0);
    $green=imagecolorallocate($img,0,255,0);
    $blue=imagecolorallocate($img,0,0,255);

    3.填充画布
    imagefill($img,0,0,$black);

    4.在画布上画图像或文字
    imagefilledellipse($img,250,150,200,200,$white);

    5.输出最终图像或保存最终图像
    header('content-type:image/jpeg');

    1)图片从浏览器上输出
    imagejpeg($img);

    2)把图片保存到本地
    imagejpeg($img,'jin.jpg');

    6.释放画布资源
    imagedestroy($img);

     1 <?php 
     2 // 1.创建画布资源
     3 $img=imagecreatetruecolor(500,300);
     4 
     5 // 2.准备颜色
     6 $black=imagecolorallocate($img,0,0,0);
     7 $white=imagecolorallocate($img,255,255,255);
     8 $red=imagecolorallocate($img,255,0,0);
     9 $green=imagecolorallocate($img,0,255,0);
    10 $blue=imagecolorallocate($img,0,0,255);
    11 
    12 // 3.填充画布
    13 imagefill($img,0,0,$black);
    14 
    15 // 4.在画布上画图像或文字
    16 imagefilledellipse($img,250,150,200,200,$white);
    17 
    18 // 5.输出最终图像或保存最终图像
    19 header('content-type:image/jpeg');
    20 
    21 // 图片从浏览器上输出
    22 imagejpeg($img);
    23 
    24 // 把图片保存到本地
    25 // imagejpeg($img,'jin.jpg');
    26 
    27 // 6.释放画布资源
    28 imagedestroy($img);
    29 
    30  ?>

     

     

    二、php如何绘制生成显示图片

    1、相关知识

    php中gd画图的场景:
    1.验证码
    2.缩放
    3.裁剪
    4.水印

    php中创建图像的六个步骤:
    1.创建画布资源
    $img=imagecreatetruecolor(500,300);

    2.准备颜色
    $black=imagecolorallocate($img,0,0,0);
    $white=imagecolorallocate($img,255,255,255);
    $red=imagecolorallocate($img,255,0,0);
    $green=imagecolorallocate($img,0,255,0);
    $blue=imagecolorallocate($img,0,0,255);

    3.填充画布
    imagefill($img,0,0,$black);

    4.在画布上画图像或文字
    imagefilledellipse($img,250,150,200,200,$white);

    5.输出最终图像或保存最终图像
    header('content-type:image/jpeg');

    1)图片从浏览器上输出
    imagejpeg($img);

    2)把图片保存到本地
    imagejpeg($img,'jin.jpg');

    6.释放画布资源
    imagedestroy($img);

    绘制图像:
    • imagefill();   //区域填充
    • imagesetpixel();  //画一个像素
    • imageline();    //画一条线
    • imagerectangle();   //画一个矩形
    • imagefilledrectangle();   //画一矩形并填充
    • imagepolygon();     //画一个多边形
    • imagefilledpolygon();  //画一个多边形并填充
    • imageellipse();  //画一个椭圆
    • imagefilledellipse();    //画一个椭圆并填充
    • imagearc();    //画一个椭圆弧
    • imagefilledarc();  //画一个椭圆弧并填充
    • imagestring();   //水平地画一行字符串
    • imagestringup();  //垂直地画一行字符串
    • imagechar();   //水平地画一个字符
    • imagecharup();   //垂直地画一个字符
    • imagettftext();  //用truetype字符向图像画一个字符串

     

     

    2、代码

     1 <?php 
     2 // 1.创建画布资源
     3 $img=imagecreatetruecolor(500,300);
     4 
     5 // 2.准备颜色
     6 $black=imagecolorallocate($img,0,0,0);
     7 $white=imagecolorallocate($img,255,255,255);
     8 $red=imagecolorallocate($img,255,0,0);
     9 $green=imagecolorallocate($img,0,255,0);
    10 $blue=imagecolorallocate($img,0,0,255);
    11 
    12 // 3.填充画布
    13 imagefill($img,0,0,$black);
    14 
    15 // 4.在画布上画图像或文字
    16 imagefilledellipse($img,250,150,200,200,$white);
    17 
    18 // 5.输出最终图像或保存最终图像
    19 header('content-type:image/jpeg');
    20 
    21 // 图片从浏览器上输出
    22 imagejpeg($img);
    23 
    24 // 把图片保存到本地
    25 // imagejpeg($img,'jin.jpg');
    26 
    27 // 6.释放画布资源
    28 imagedestroy($img);
    29 
    30  ?>

     

     

     

     

     

    转载于:https://www.cnblogs.com/Renyi-Fan/p/9279604.html

    展开全文
  •  preg_split() 通过一个正则表达式分隔字符串 str_split() 将字符串转换成数组 字符串查找函数: strrchr — 查找指定字符在字符串中的最后一次出现 string strrchr( string $haystack ,  mixed...
  • Java实现一个生成验证码图片工具类 这是我第一次写博客,还不太熟练。 生成验证码图片工具类 代码比较简单,添加了注释,稍微理解一下就能明白: 1.先准备一下变量 // 验证码字符集 private static final char[] ...
  • public void fun1() throws FileNotFoundException, IOException { ... * 得到这图片的绘制环境(得到画笔) */ BufferedImage b1=new BufferedImage(70, 35, BufferedImage.TYPE_INT_RGB); ...
  • MATLAB曲线绘制

    千次阅读 2012-04-13 10:40:42
    。 二维数据曲线图 1.1 绘制 单根二维曲线 plot 函数的基本调用 格式为: plot(x,y)  其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据。 例1-1 在0≤x≤2p区间内,绘制曲线
  • 固定验证码生成类:获取验证码图片,获取验证码图片组,用于合成gif动态图,获取gif图片输入流;生成验证码字符串,把多张jpg图片合成一张。
  • 再画一个矩形框 36 using (Pen p = new Pen(Color.White)) 37 { 38 myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3 ), 2 ); 39 myTabRect.Width = CLOSE_SIZE; 40 myTabRect.Height = ...
  • 这篇教程将会展示如何用python的图形化包“Pygame”和基础的文件I/O来创建一个自写程序。这个程序将可以仿照给定的图片来创作一幅马赛克画。Python是一种非常强大的编程语言。它有着许多的内建函数和可下载的软件包...
  • Python二维码应用()QRcode二维码生成&识别

    万次阅读 多人点赞 2019-01-05 20:35:39
    基于Python的二维码实验、机器视觉之QRcode二、基于Python的QRcodetest()配置环境(二)生成自己的二维码(三)识别二维码三、调用opencv库摄像头识别图像 、机器视觉之QRcode 问:什么是QRcode呢? 答...
  • 这篇教程将会展示如何用python的图形化包“Pygame”和基础的文件I/O来创建一个自写程序。这个程序将可以仿照给定的图片来创作一幅马赛克画。Python是一种非常强大的编程语言。它有着许多的内建函数和可下载的软件包...
  • C#绘制图形

    千次阅读 2019-11-26 10:44:37
    本章要求掌握用GDI+绘制直线、圆、长方形等图形,在第七章的基础上编写一个类似于“画图”图像图形处理程序 8.1 绘图所用到的常用控件及类 绘图用到的PictureBox,Image, Bitmap, OpenFileDialog,SaveFil...
  • 先来看最简单的—实现的功能是,将一个字符串变成图片写入到文件中实现代码:package cn.hncu.img;import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.FileNotFoundException; import
  • 前几天有需求,需要根据后台返回的数据动态生成图片显示到页面上,猛然想到使用验证码图片的方式动态生成图片,然后网上找到方法给图片添加水印,包括文字水印和图片水印。 水印实现效果参考如下网址:...
  • WaterImage* Use for add a water Image to the picture both words and image* By Gary Gong From Demetersoft.com | 和信诚软件(北京)有限公司* 2007.07.23 create the file * * * 使用说明:* 建议先定义一个...
  • 参考: https://blog.csdn.net/javasun608/article/details/79307845 ... Graphics2D ...  根据API上的说法是,在使用Graphics2D类库的时候,这是进行操作的主要类,类似于提供了种context。Graphics2D为抽象...
  • 上一节我们了解了PNET的基本原理,本节看看如何生成PNET需要的训练数据。总体而言我们需要产生两部分数据,部分图片里面包含人脸,另部分不包含人脸。这里的“包含”或“不包含”并不是指图片中完全没有人脸,...
  • 昨天看到群里有人说二维码动态图怎么生成的。今天就告诉你怎么生成的。1. 二维码二维码(2-dimensional bar code),是用某种特定的几何图形按一定规律在平...
  • javaWeb生成验证码

    2019-12-30 13:00:19
    javaWeb应用产生验证码主要分为三板块,即:1,产生验证码字符串字符串写入到输出流中。2,在code.jsp中进行中间处理,主要是让浏览器清空缓存。 3,在index.jsp页面生成验证码 1,产生验证码字符串都工具类 ...
  • 讲真,词云图是我接触python语言以及大数据的启蒙者,记得很久以前看到网上有制作qq好友相关信息的词云图,真的是瞬间就惊呆了,兴趣使然,真心爱上了这块,也没想到从基础学起历经了这么长时间,现在又来到了...
  • 验证码生成+局部刷新

    2018-11-29 20:49:25
    验证码的生成大致思路主要是随机生成字符串将其存入session;然后使用BufferedImage和Graphics类把其转为图片,,增加一些难度就是加一些干扰线,然后再将这些随机字符串以图片的形式输出。并且实现其局部刷新(当...
  • 2、验证码图片中绘制干扰线 验证码效果: 实现代码如下: //使用RequestMapping("/getVerifyCode")前端调用验证码功能,并将验证码保存在session中,进行前端验证码与后台验证码的对比 ...
  • matlab曲线绘制

    2014-07-25 20:19:22
    。 二维数据曲线图 1.1 绘制 单根二维曲线 plot 函数的基本调用 格式为: plot(x,y)  其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据。 例1-1 在0≤x≤2p区间内,绘制曲线

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,024
精华内容 1,209
关键字:

绘制一个矩形添加字符串生成jpg格式