精华内容
下载资源
问答
  • 二维码框架
    更多相关内容
  • 学习安卓二维码框架zxing,来制作自己的二维码和实现扫一扫功能。

    Zxing的使用

    导入依赖:

    compile 'cn.yipianfengye.android:zxing-library:2.2'
    

    申请权限:

    <!--震动权限-->
        <uses-permission android:name="android.permission.VIBRATE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!--照相机权限-->
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 -->
        <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->
    

    如果是Android6.0以上版本进行动态申请权限

    String[] permissions=new String[]{Manifest.permission.
                    WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
                requestPermissions(permissions,PERMS_REQUEST_CODE);
            }
    
    

    第一步操作为初始化:

    ZXingLibrary.initDisplayOpinion(this);
    

    通过intent进行简单扫描:

     //设置进行扫描二维码
    Intent intent = new Intent();
    intent.setClass(MainActivity.this, CaptureActivity.class);
    startActivityForResult(intent,REQUEST);
    

    或者使用手机图片进行扫描

    //进行跳转到图片
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    startActivityForResult(intent, REQUEST_IMAGE);
    

    简单扫描结果进行处理:

    if(requestCode == 1){
        //进行简单扫描
        //获取数据
        if(data != null){
            Bundle bundle = data.getExtras();
            //判断bundle中存储的数据是否代表解析成功
            if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS){
                //获取解析结果
                String result = bundle.getString(CodeUtils.RESULT_STRING);
                Toast.makeText(MainActivity.this,"解析结果"+result,Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
            }
        }
    
    }
    

    图库中图片二维码处理结果:

    public static String deCodeQR(Bitmap bitmap) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int[] pixels = new int[width * height];
        bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
        RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
        Result result = null;
        QRCodeReader reader = new QRCodeReader();
        try {
            result = reader.decode(binaryBitmap);
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
        if(result == null || result.equals("")){
            return "解析结果失败";
        }
        return result.getText();
    }
    
    

    进行获取扫描数据:

    if(requestCode == 2){
        //进行图片扫描
        if(data != null){
            //获取Uri
            Uri uri = data.getData();
            ContentResolver contentResolver = getContentResolver();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);//获取对应的Bitmap图片
                //解析bitmap二维码图片
                String s = deCodeQR(bitmap);
                Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    设置自定义布局来进行扫描二维码:

    两个布局文件如下:

    1.在values的colors文件下添加颜色,决定了二维码四个边框的颜色

    #0effc22.
    2.在drawable文件下添加一个scan_image.png的图片,就是二维码扫描的那条横线

    3.创建一个新的Activity(demo里叫 SecondActivity )集成FragmentActivity,在清单文件里进行配置。

    1. 修改新的Activity布局文件,是二维码的背景布局

    2. 技术点:启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们

    会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。

    而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。

    1. 创建my_camera.xml布局文件,这个就是扫描二维码的界面

    要自定义二维码扫描页面,就在这个布局里进行修改,这里我加了一个ToolBar,一个Button按钮

    用来退出扫描。

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_second"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <Button
            android:id="@+id/second_button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:text="取消二维码扫描" />
        <FrameLayout
            android:id="@+id/fl_my_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </FrameLayout>
    </FrameLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <SurfaceView
            android:id="@+id/preview_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <com.uuzuche.lib_zxing.view.ViewfinderView
            android:id="@+id/viewfinder_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:inner_corner_length="30dp"
            app:inner_corner_width="5dp"
            app:inner_height="200dp"
            app:inner_margintop="150dp"
            app:inner_scan_iscircle="false"
            app:inner_scan_speed="10"
            app:inner_width="200dp" />
    </FrameLayout>
    

    SecondActivity文件(代替CaptureActivity.java)

    package com.it.zxing;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    import com.uuzuche.lib_zxing.activity.CaptureFragment;
    import com.uuzuche.lib_zxing.activity.CodeUtils;
    
    public class SecondActivity extends AppCompatActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment);
    
            CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() {
                @Override
                public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                    Intent resultIntent = new Intent();
                    Bundle bundle = new Bundle();
                    bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS);
                    bundle.putString(CodeUtils.RESULT_STRING, result);
                    resultIntent.putExtras(bundle);
                    SecondActivity.this.setResult(RESULT_OK, resultIntent);
                    SecondActivity.this.finish();
                }
    
                @Override
                public void onAnalyzeFailed() {
                    Intent resultIntent = new Intent();
                    Bundle bundle = new Bundle();
                    bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED);
                    bundle.putString(CodeUtils.RESULT_STRING, "");
                    resultIntent.putExtras(bundle);
                    SecondActivity.this.setResult(RESULT_OK, resultIntent);
                    SecondActivity.this.finish();
                }
            };
    
            //在Activity中执行Fragment的初始化操作
            //执行扫面Fragment的初始化操作
            CaptureFragment captureFragment = new CaptureFragment();
            // 为二维码扫描界面设置定制化界面
            CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera);
            captureFragment.setAnalyzeCallback(analyzeCallback);
            getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();
            //进行展示
        }
    }
    
    

    生成二维码图片(不带logo)

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            String textContent = editText.getText().toString();
            if (TextUtils.isEmpty(textContent)) {
                Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();
                return;
            }
            editText.setText("");
            mBitmap = CodeUtils.createImage(textContent, 400, 400, null);
            imageView.setImageBitmap(mBitmap);
        }
    });
    
    展开全文
  • 这个二维码框架不仅使用的代码少,而且可以生成带图片的二维码,而且二维码扫描界面也是先做好的,也比较好看。我们所需要做的就是在扫描二维码后得到的数据对其进行操作。 使用方法 添加依赖 compile '...
  • Android 项目中生成二维码的开源项目主要有,SwetakeQRCode、BarCode4j、Zxing等等。         本章节讲述Zxing框架的使用     代码说明   核心代码1:处理扫描结果 /** * 处理扫描结果 * @...

    Android 项目中生成二维码的开源项目主要有,SwetakeQRCode、BarCode4j、Zxing等等。

     

     

     

     

    本章节讲述Zxing框架的使用

     

     

    代码说明

     

    核心代码1:处理扫描结果

    	/**
    	 * 处理扫描结果
    	 * @param result
    	 * @param barcode
    	 */
    	 
    	public void handleDecode(Result result, Bitmap barcode) {
    		inactivityTimer.onActivity();
    		playBeepSoundAndVibrate();
    		String resultString = result.getText();
    		if (resultString.equals("")) {
    			Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show();
    		}else {
    			Intent resultIntent = new Intent();
    			Bundle bundle = new Bundle();
    			bundle.putString("result", resultString);
    			bundle.putParcelable("bitmap", barcode);
    			resultIntent.putExtras(bundle);
    			this.setResult(RESULT_OK, resultIntent);
    		}
    		MipcaActivityCapture.this.finish();
    	}

     

     

    核心代码2:扫描框

    public final class ViewfinderView extends View {
    	private static final String TAG = "log";
    	/**
    	 * 刷新界面的时间
    	 */
    	private static final long ANIMATION_DELAY = 10L;
    	private static final int OPAQUE = 0xFF;
    
    	/**
    	 * 四个绿色边角对应的长度
    	 */
    	private int ScreenRate;
    	
    	/**
    	 * 四个绿色边角对应的宽度
    	 */
    	private static final int CORNER_WIDTH = 10;
    	/**
    	 * 扫描框中的中间线的宽度
    	 */
    	private static final int MIDDLE_LINE_WIDTH = 6;
    	
    	/**
    	 * 扫描框中的中间线的与扫描框左右的间隙
    	 */
    	private static final int MIDDLE_LINE_PADDING = 5;
    	
    	/**
    	 * 中间那条线每次刷新移动的距离
    	 */
    	private static final int SPEEN_DISTANCE = 5;
    	
    	/**
    	 * 手机的屏幕密度
    	 */
    	private static float density;
    	/**
    	 * 字体大小
    	 */
    	private static final int TEXT_SIZE = 16;
    	/**
    	 * 字体距离扫描框下面的距离
    	 */
    	private static final int TEXT_PADDING_TOP = 30;
    	
    	/**
    	 * 画笔对象的引用
    	 */
    	private Paint paint;
    	
    	/**
    	 * 中间滑动线的最顶端位置
    	 */
    	private int slideTop;
    	
    	/**
    	 * 中间滑动线的最底端位置
    	 */
    	private int slideBottom;
    	
    	/**
    	 * 将扫描的二维码拍下来,这里没有这个功能,暂时不考虑
    	 */
    	private Bitmap resultBitmap;
    	private final int maskColor;
    	private final int resultColor;
    	
    	private final int resultPointColor;
    	private Collection<ResultPoint> possibleResultPoints;
    	private Collection<ResultPoint> lastPossibleResultPoints;
    
    	boolean isFirst;
    	
    	public ViewfinderView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		
    		density = context.getResources().getDisplayMetrics().density;
    		//将像素转换成dp
    		ScreenRate = (int)(20 * density);
    
    		paint = new Paint();
    		Resources resources = getResources();
    		maskColor = resources.getColor(R.color.viewfinder_mask);
    		resultColor = resources.getColor(R.color.result_view);
    
    		resultPointColor = resources.getColor(R.color.possible_result_points);
    		possibleResultPoints = new HashSet<ResultPoint>(5);
    	}
    
    	@Override
    	public void onDraw(Canvas canvas) {
    		//中间的扫描框,你要修改扫描框的大小,去CameraManager里面修改
    		Rect frame = CameraManager.get().getFramingRect();
    		if (frame == null) {
    			return;
    		}
    		
    		//初始化中间线滑动的最上边和最下边
    		if(!isFirst){
    			isFirst = true;
    			slideTop = frame.top;
    			slideBottom = frame.bottom;
    		}
    		
    		//获取屏幕的宽和高
    		int width = canvas.getWidth();
    		int height = canvas.getHeight();
    
    		paint.setColor(resultBitmap != null ? resultColor : maskColor);
    		
    		//画出扫描框外面的阴影部分,共四个部分,扫描框的上面到屏幕上面,扫描框的下面到屏幕下面
    		//扫描框的左边面到屏幕左边,扫描框的右边到屏幕右边
    		canvas.drawRect(0, 0, width, frame.top, paint);
    		canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
    		canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1,
    				paint);
    		canvas.drawRect(0, frame.bottom + 1, width, height, paint);
    		
    		
    
    		if (resultBitmap != null) {
    			// Draw the opaque result bitmap over the scanning rectangle
    			paint.setAlpha(OPAQUE);
    			canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);
    		} else {
    
    			//画扫描框边上的角,总共8个部分
    			paint.setColor(Color.GREEN);
    			canvas.drawRect(frame.left, frame.top, frame.left + ScreenRate,
    					frame.top + CORNER_WIDTH, paint);
    			canvas.drawRect(frame.left, frame.top, frame.left + CORNER_WIDTH, frame.top
    					+ ScreenRate, paint);
    			canvas.drawRect(frame.right - ScreenRate, frame.top, frame.right,
    					frame.top + CORNER_WIDTH, paint);
    			canvas.drawRect(frame.right - CORNER_WIDTH, frame.top, frame.right, frame.top
    					+ ScreenRate, paint);
    			canvas.drawRect(frame.left, frame.bottom - CORNER_WIDTH, frame.left
    					+ ScreenRate, frame.bottom, paint);
    			canvas.drawRect(frame.left, frame.bottom - ScreenRate,
    					frame.left + CORNER_WIDTH, frame.bottom, paint);
    			canvas.drawRect(frame.right - ScreenRate, frame.bottom - CORNER_WIDTH,
    					frame.right, frame.bottom, paint);
    			canvas.drawRect(frame.right - CORNER_WIDTH, frame.bottom - ScreenRate,
    					frame.right, frame.bottom, paint);
    
    			
    			//绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE
    			slideTop += SPEEN_DISTANCE;
    			if(slideTop >= frame.bottom){
    				slideTop = frame.top;
    			}
    			canvas.drawRect(frame.left + MIDDLE_LINE_PADDING, slideTop - MIDDLE_LINE_WIDTH/2, frame.right - MIDDLE_LINE_PADDING,slideTop + MIDDLE_LINE_WIDTH/2, paint);
    			
    			
    			//画扫描框下面的字
    			paint.setColor(Color.WHITE);
    			paint.setTextSize(TEXT_SIZE * density);
    			paint.setAlpha(0x40);
    			paint.setTypeface(Typeface.create("System", Typeface.BOLD));
    			canvas.drawText(getResources().getString(R.string.scan_text), frame.left, (float) (frame.bottom + (float)TEXT_PADDING_TOP *density), paint);
    			
    			
    
    			Collection<ResultPoint> currentPossible = possibleResultPoints;
    			Collection<ResultPoint> currentLast = lastPossibleResultPoints;
    			if (currentPossible.isEmpty()) {
    				lastPossibleResultPoints = null;
    			} else {
    				possibleResultPoints = new HashSet<ResultPoint>(5);
    				lastPossibleResultPoints = currentPossible;
    				paint.setAlpha(OPAQUE);
    				paint.setColor(resultPointColor);
    				for (ResultPoint point : currentPossible) {
    					canvas.drawCircle(frame.left + point.getX(), frame.top
    							+ point.getY(), 6.0f, paint);
    				}
    			}
    			if (currentLast != null) {
    				paint.setAlpha(OPAQUE / 2);
    				paint.setColor(resultPointColor);
    				for (ResultPoint point : currentLast) {
    					canvas.drawCircle(frame.left + point.getX(), frame.top
    							+ point.getY(), 3.0f, paint);
    				}
    			}
    
    			
    			//只刷新扫描框的内容,其他地方不刷新
    			postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top,
    					frame.right, frame.bottom);
    			
    		}
    	}
    
    	public void drawViewfinder() {
    		resultBitmap = null;
    		invalidate();
    	}
    
    	/**
    	 * Draw a bitmap with the result points highlighted instead of the live
    	 * scanning display.
    	 * 
    	 * @param barcode
    	 *            An image of the decoded barcode.
    	 */
    	public void drawResultBitmap(Bitmap barcode) {
    		resultBitmap = barcode;
    		invalidate();
    	}
    
    	public void addPossibleResultPoint(ResultPoint point) {
    		possibleResultPoints.add(point);
    	}
    
    }
    

     

     

    完整项目代码:https://github.com/wujianning/QrCode

     

    展开全文
  • 1、导入jar包、这里使用core包 下载网址... 2、创建二维码 使用到了矩阵 try { //判断URL合法性 if (url == null || "".equals(url) || url.length() < 1

    1、导入jar包、这里使用core包

    下载网址https://github.com/zxing/zxing/wiki/Getting-Started-Developing

    2、创建二维码

    使用到了矩阵

     try {
                //判断URL合法性
                if (url == null || "".equals(url) || url.length() < 1)
                {
                    return;
                }
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                //容错级别
                hints.put(EncodeHintType.ERROR_CORRECTION, String.valueOf(ErrorCorrectionLevel.H));
                //图像数据转换,使用了矩阵转换
                BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
                int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
                //下面这里按照二维码的算法,逐个生成二维码的图片,
                //两个for循环是图片横列扫描的结果
                for (int y = 0; y < QR_HEIGHT; y++)
                {
                    for (int x = 0; x < QR_WIDTH; x++)
                    {
                        if (bitMatrix.get(x, y))
                        {
                            pixels[y * QR_WIDTH + x] = 0xff000000;
                        }
                        else
                        {
                            pixels[y * QR_WIDTH + x] = 0xffffffff;
                        }
                    }
                }
                //生成二维码图片的格式,使用ARGB_8888
                Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
    
                //打logo
                Bitmap logo= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
                addLogo(bitmap,logo);
                //显示到一个ImageView上面
                sweepTV.setImageBitmap(bitmap);
            } catch (WriterException e) {
                e.printStackTrace();
            }

    效果



    2、添加Logo,

    private Bitmap addLogo(Bitmap qrBitmap,Bitmap logoBitmap){
            int qrBitmapWidth = qrBitmap.getWidth();
            int qrBitmapHeight = qrBitmap.getHeight();
            int logoBitmapWidth = logoBitmap.getWidth();
            int logoBitmapHeight = logoBitmap.getHeight();
            Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth, qrBitmapHeight, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(blankBitmap);
            canvas.drawBitmap(qrBitmap, 0, 0, null);
            canvas.save(Canvas.ALL_SAVE_FLAG);
            float scaleSize = 1.0f;
            while ((logoBitmapWidth / scaleSize) > (qrBitmapWidth / 5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight / 5)) {
                scaleSize *= 2;
            }
            float sx = 1.0f / scaleSize;
            canvas.scale(sx, sx, qrBitmapWidth / 2, qrBitmapHeight / 2);
            canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) / 2, (qrBitmapHeight - logoBitmapHeight) / 2, null);
            canvas.restore();
            return blankBitmap;
        }

    最后添加一个有效的网络路径就算创建完成了

    扫描二维码:

    需要导入zxing下的android包,添加module的依赖

    核心类CaptureAcitivity

    还需要知道这个类的回调方法,返回参数,key是多少,只是使用的话知道这么多就足够了,这里只需要得到result

    public void handleDecode(Result rawResult, Bundle bundle) {
        inactivityTimer.onActivity();
        beepManager.playBeepSoundAndVibrate();
    
        Intent resultIntent = new Intent();
        bundle.putInt("width", mCropRect.width());
        bundle.putInt("height", mCropRect.height());
        bundle.putString("result", rawResult.getText());
        resultIntent.putExtras(bundle);
        this.setResult(RESULT_OK, resultIntent);
        CaptureActivity.this.finish();
    }
    点击触发跳转事件

       public void onclick(View view) {
            startActivityForResult(new Intent(this,CaptureActivity.class),0);
        }
    重写onActivityResult方法获取返回的数据,并处理数据
     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode==RESULT_OK){
                Bundle bundle = data.getExtras();
                String result = bundle.getString("result");
                ((TextView)findViewById(R.id.message)).setText(result);
            }
        }









    展开全文
  • Android 二维码框架之Zxing实现二维码扫描功能     1、ZXing库介绍  这里简单介绍一下ZXing库。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing...
  • 二维码框架Zxing的使用及自定义

    万次阅读 多人点赞 2018-06-19 21:58:04
    在开始介绍之前,我先说一下我的使用情况吧,网上的博客里面基本上都把Zxing框架自己封装了,或者在教程中需要添加library然后修改源文件。否则你就无法自定义ZXing,并且你还会遇到某些问题——比如二维码扫描图片...
  • 一 、引入Zxing依赖 ... <artifactId>core <version>3.2.1 ... BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, ...运行main方法 在项目路劲下会生成指定文件名的二维码
  • vue2.0前端生成二维码
  • --二维码--&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&gt;core&lt;/artifactId&gt; &lt;version&gt;3.1.0&...
  • 本工具类基于Google二维码框架zxing3.1.0实现。 pom.xml中依赖包设置 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.1.0&...
  • 主要为大家详细介绍了iOS第三方框架二维码生成与扫描,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 合并水印到二维码 参数1为图片地址 参数2为 所占百分比 如 .15 QrCode::format('png')->size(200)->merge('参数1',参数2)->generate('LaravelAcademy',public_path('qrcodes/qrcode.png')); 三、其他设置 1.边距设置...
  • XZQRCode_Swift 包含UI界面的轻量级二维码扫描框架

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,919
精华内容 24,767
关键字:

二维码框架