GithubHelp home page GithubHelp logo

sumimakito / awesomeqrcode Goto Github PK

View Code? Open in Web Editor NEW
1.9K 56.0 261.0 14.42 MB

An awesome QR code generator for Android.

License: Apache License 2.0

Java 3.12% Kotlin 96.88%
qrcode qr-code qrcode-generator qr-generator

awesomeqrcode's Introduction

Special, thus awesome.

release license

Awesome QR code - An awesome QR code generator for Android.

Yay! Available on Google Play!

With the Awesome QR app, you can play with these options like a master!

Google Play Store

Showcase

No Logo With Logo Animated GIF

Listing only several styles for demonstration.

Find out more styles and options in the Awesome QR app!

Installation

To add the dependency into your project, edit your project-level build.gradle first.

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Then, edit your build.gradle on module level.

Remember to replace <LATEST_VERSION_NAME> with the latest version name showed on the JitPack badge.

dependencies {
    implementation 'com.github.SumiMakito:AwesomeQRCode:<LATEST_VERSION_NAME>'
}

Usage

1. Say hello to RenderOption.

Like a recipe, RenderOption stores a set of options and it will tell the renderer "how to stylize the QR code for you."

// Kotlin

val renderOption = RenderOption()
renderOption.content = "Special, thus awesome." // content to encode
renderOption.size = 800 // size of the final QR code image
renderOption.borderWidth = 20 // width of the empty space around the QR code 
renderOption.ecl = ErrorCorrectionLevel.M // (optional) specify an error correction level
renderOption.patternScale = 0.35f // (optional) specify a scale for patterns
renderOption.roundedPatterns = true // (optional) if true, blocks will be drawn as dots instead
renderOption.clearBorder = true // if set to true, the background will NOT be drawn on the border area
renderOption.color = color // set a color palette for the QR code
renderOption.background = background // set a background, keep reading to find more about it
renderOption.logo = logo // set a logo, keep reading to find more about it
// Java

RenderOption renderOption = new RenderOption();
renderOption.setContent("Special, thus awesome."); // content to encode
renderOption.setSize(800); // size of the final QR code image
renderOption.setBorderWidth(20); // width of the empty space around the QR code
renderOption.setEcl(ErrorCorrectionLevel.M); // (optional) specify an error correction level
renderOption.setPatternScale(0.35f); // (optional) specify a scale for patterns
renderOption.setRoundedPatterns(true); // (optional) if true, blocks will be drawn as dots instead
renderOption.setClearBorder(true); // if set to true, the background will NOT be drawn on the border area
renderOption.setColor(color); // set a color palette for the QR code
renderOption.setBackground(background); // set a background, keep reading to find more about it
renderOption.setLogo(logo); // set a logo, keep reading to find more about it

But, wait. What is a background? Don't worry and keep reading. :)

2. Grab a background.Optional

Awesome QR code natively provides three types of backgrounds. Each background should extend the abstract Background class.

// Kotlin

// A still background (a still image as the background)
val background = StillBackground()
background.bitmap = backgroundBitmap // assign a bitmap as the background
background.clippingRect = Rect(0, 0, 200, 200) // crop the background before applying
background.alpha = 0.7f // alpha of the background to be drawn

// A blend background (to draw a QR code onto an area of a still image)
val background = BlendBackground()
background.bitmap = backgroundBitmap
background.clippingRect = Rect(0, 0, 200, 200)
background.alpha = 0.7f
background.borderRadius = 10 // radius for blending corners

// A gif background (animated)
val background = GifBackground()
background.inputFile = gifFile // assign a file object of a gif image to this field
background.outputFile = File(pictureStorage, "output.gif") // IMPORTANT: the output image will be saved to this file object
background.clippingRect = Rect(0, 0, 200, 200)
background.alpha = 0.7f
// Java

// A still background (a still image as the background)
StillBackground background = new StillBackground(); 
background.setBitmap(backgroundBitmap); // assign a bitmap as the background
background.setClippingRect(new Rect(0, 0, 200, 200));// crop the background before 
background.setAlpha(0.7f); // alpha of the background to be drawn

// A blend background (to draw a QR code onto an area of a still image)
BlendBackground background = new BlendBackground();
background.setBitmap(backgroundBitmap);
background.setClippingRect(new Rect(0, 0, 200, 200));
background.setAlpha(0.7f);
background.setBorderRadius(10); // radius for blending corners

// A gif background (animated)
GifBackground background = new GifBackground();
background.setInputFile(gifFile); // assign a file object of a gif image to this field
background.setOutputFile(new File(pictureStorage, "output.gif")); // IMPORTANT: the output image will be saved to this file object
background.setClippingRect(new Rect(0, 0, 200, 200));
background.setAlpha(0.7f);

3. Seek for a rainbow.Optional

This step is optional since Awesome QR code will use black and white as the default color set.

// Kotlin

val color = Color()
color.light = 0xFFFFFFFF.toInt() // for blank spaces
color.dark = 0xFFFF8C8C.toInt() // for non-blank spaces
color.background = 0xFFFFFFFF.toInt() // for the background (will be overriden by background images, if set)
color.auto = false // set to true to automatically pick out colors from the background image (will only work if background image is present)
// Java

Color color = new Color(); 
color.setLight(0xFFFFFFFF); // for blank spaces
color.setDark(0xFFFF8C8C); // for non-blank spaces
color.setBackground(0xFFFFFFFF); // for the background (will be overriden by background images, if set)
color.setAuto(false); // set to true to automatically pick out colors from the background image (will only work if background image is present)

4. Hey. I want a Logo.Optional

This step is optional since the logo is not required by default.

// Kotlin

val logo = Logo()
logo.bitmap = logoBitmap
logo.borderRadius = 10 // radius for logo's corners
logo.borderWidth = 10 // width of the border to be added around the logo
logo.scale = 0.3f // scale for the logo in the QR code
logo.clippingRect = Rect(0, 0, 200, 200) // crop the logo image before applying it to the QR code
// Java

Logo logo = new Logo();
logo.setBitmap(logoBitmap);
logo.setBorderRadius(10); // radius for logo's corners
logo.setBorderWidth(10); // width of the border to be added around the logo
logo.setScale(0.3f); // scale for the logo in the QR code
logo.setClippingRect(new Rect(0, 0, 200, 200)); // crop the logo image before applying it to the QR code

5. Render!

Meet the magical renderer.

If you prefer the asynchronous way...
// Kotlin

val result = AwesomeQrRenderer.renderAsync(renderOption, { result ->
    if (result.bitmap != null) {
        // play with the bitmap
    } else if (result.type == RenderResult.OutputType.GIF) {
        // If your Background is a GifBackground, the image 
        // will be saved to the output file set in GifBackground
        // instead of being returned here. As a result, the 
        // result.bitmap will be null.
    } else {
        // Oops, something gone wrong.
    }
}, { 
    exception -> exception.printStackTrace() 
    // Oops, something gone wrong.
})
Or synchronously...
// Kotlin

try {
    val result = AwesomeQrRenderer.render(renderOption)
    if (result.bitmap != null) {
        // play with the bitmap
    } else if (result.type == RenderResult.OutputType.GIF) {
        // If your Background is a GifBackground, the image 
        // will be saved to the output file set in GifBackground
        // instead of being returned here. As a result, the 
        // result.bitmap will be null.
    } else {
        // Oops, something gone wrong.
    }
} catch (e: Exception) {
    e.printStackTrace()
    // Oops, something gone wrong.
}

Changelog

Version 1.2.0

  • Translated into Kotlin.
  • Changed to the RenderOption-Renderer structure.

Version 1.1.1

  • Fixed a bug that would previously cause the gaps between blocks in position/alignment patterns.

Version 1.1.0

  • Added the support for GIF backgrounds.
  • Fixed some issues found in the previous version.

Version 1.0.6

  • Fixed a "divide by zero" error mentioned in #20.

Version 1.0.5

  • The way to use Awesome QR code is more elegant.

Version 1.0.4

  • New feature: Embedding a logo image in the QR code.
  • Sample/Demo application updated.

Version 1.0.3

  • Added CHARACTER_SET => UTF-8 to QR code's hints before encoding.
  • Fixed an encoding issue mentioned in #7.

Version 1.0.2

  • Added an optional parameter which enables the data dots to appear as filled circles.

Version 1.0.1

  • Now background images can be binarized as you like.

Version 1.0.0

  • Initial release.

Alternatives

Awesome-qr.js written in JavaScript

Redirect to Awesome-qr.js

EFQRCode written in Swift

EFQRCode is a tool to generate QRCode image or recognize QRCode from image, in Swift.

Awesome QR code is inspired by EFQRCode by EyreFree.

If your application is in need of generating pretty QR codes in Swift, take a look at EFQRCode. It should help.

Donation

If you think Awesome QR code is awesome, would you like to buy me a cup of cappuccino?

Sponsors

It is those generous sponsors who supports this project makes the Awesome-qr.js more awesome!

I'd like to express my sincere appreciation to all the generous sponsors.

Special thanks

Copyright & License

Apache-2.0 license

Awesome QR code is available under the Apache-2.0 license. See the LICENSE file for more info.

Copyright © 2017-2018 Makito.

Exclusive Distributor Agreement

By including, importing, modifying, redistributing, or using this library, you acknowledge and agree that you have read and accept the terms of this Exclusive Distributor Agreement.

WHILE REDISTRIBUTING THIS LIBRARY, THIS AGREEMENT SHALL ALSO BE ATTACHED WITH THE APACHE-2.0 LICENSE.

You're FREE to:

  • Use Awesome QR code in your projects (commercial projects are okay as well).
  • Modify the code according to your needs.
  • Redistribute the modified code under the Exclusive Distributor Agreement and the Apache-2.0 license.

You're FORBIDDEN to:

  • Make Awesome QR code the main or the only feature of your applications.
  • Treat the whole or part of Awesome QR code as a paid function.
  • Make a demo or sample application for Awesome QR code and submit the application to the store (IBNLT Google Play Store, etc.).

awesomeqrcode's People

Contributors

sumimakito avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

awesomeqrcode's Issues

不支持中文?

中文内容生成二维码,扫描结果全为“????????”,是不支持中文吗

貌似不支持中文

如果填入的内容是中文的,那么貌似扫描出来的是问号乱码。

DSL support for kotlin

With current options we can create sample content with the following code:

        val renderOption = RenderOption().apply {
            content = "Sample content"
            size = 400
            borderWidth = 0
            patternScale = 1f
            clearBorder = true
            color = Color().apply {
                light = 0xFFFFFFFF.toInt()
                dark = 0xFF000000.toInt()
                background = 0xFFFFFFFF.toInt()
            }
        }
        val result = AwesomeQrRenderer.render(renderOption)

However, with a DSL this code can possibly be written in a much more clear way:

        val result = awesomeQrRenderer {
            content = "Sample content"
            size = 400
            borderWidth = 0
            patternScale = 1f
            clearBorder = true
            color {
                light = 0xFFFFFFFF.toInt()
                dark = 0xFF000000.toInt()
                background = 0xFFFFFFFF.toInt()
            }
        }

Qr code is not rendered

I tried to use and it's generate the btimap , but when I scan the code no thing happens
here's my code

`
val logo = Logo()
logo.bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.app_icon)
logo.borderRadius = 10 // radius for logo's corners
logo.borderWidth = 10 // width of the border to be added around the logo
logo.scale = 0.3f // scale for the logo in the QR code
logo.clippingRect = RectF(0f, 0f, 200f, 200f)

					val renderOption = RenderOption()
					renderOption.borderWidth = 20 // width of the empty space around the QR code
					renderOption.ecl = ErrorCorrectionLevel.M // (optional) specify an error correction level
					renderOption.patternScale = 0.35f
					renderOption.content = "www.google.com" // content to encode
					renderOption.size = 800 // size of the final QR code image
					renderOption.color = Color(
							auto = true,
							background = android.R.color.white,
							light = 0xFF0081D0.toInt(),
							dark = 0xFF0081D0.toInt(),
					) // set a color palette for the QR code
					renderOption.logo = logo

					try {
							val result = AwesomeQrRenderer.render(renderOption)
							if (result.bitmap != null) {
									// play with the bitmap
									findViewById<AppCompatImageView>(R.id.ivQrLogo)!!.setImageBitmap(result.bitmap)
							} else {
									// Oops, something gone wrong.
							}
					} catch (e: Exception) {
							e.printStackTrace()
					}

`

Gradle Build error

Error: Program type already present: com.github.sumimakito.awesomeqr.BuildConfig

How can i fix this ?

implementation ('com.github.SumiMakito:AwesomeQRCode:1.0.6')

Transparent colorLight?

Is there a way to set colorLight transparent as Color.TRANSPARENT didn't work.
And also, sometimes scanning a QR code with background image fails.

Error dependency instruction in readme

The instruction about how to add library as dependency is not correct.

dependencies {
    compile 'com.github.SumiMakito:Awesome QR code:<LATEST_VERSION_NAME>'
}

Notice that there are spaces in Awesome QR code, however the repo name doesn't contains whitespace, then the jitpack URL is wrong, leading to errors when downloading this library from jitpack. The correct jitpack link should like:

https://jitpack.io/com/github/SumiMakito/AwesomeQRCode/1.2.0/AwesomeQRCode-1.2.0.pom

Rather than

https://jitpack.io/com/github/SumiMakito/Awesome%20QR%20code/1.2.0/Awesome%20QR%20code-1.2.0.pom

Uneven margin when logo added to QR

When generating a code with just a background, the margins are evenly spaced around the edges. If I then add a logo, the margin only appears on the right hand side and not on the top, bottom, or left.

use this library with existing app for Decoration options

I read your library documentation.
Actually i've an existing QR generator app on play store. Now i want to add decoration option to my app.
My question is that can i use this library with QR image..means is there any option to apply all decoration to QR image that is created using another library.
Regards.

Method not Display When using Fragment

Color color = new Color();
color.setLight(0xFFFFFFFF); // for blank spaces
color.setDark(0xFFFF8C8C); // for non-blank spaces
color.setBackground(0xFFFFFFFF); // for the background (will be overriden by background images, if set)
color.setAuto(false

all this method is not work. It becames all red color which is error.

error divide by zero with some background image

Hi,

with some drawable as background image, i have an error divide by zero :
System.err: java.lang.ArithmeticException: divide by zero System.err: at com.github.sumimakito.awesomeqr.AwesomeQRCode.getDominantColor(AwesomeQRCode.java:377) System.err: at com.github.sumimakito.awesomeqr.AwesomeQRCode.render(AwesomeQRCode.java:116) System.err: at com.github.sumimakito.awesomeqr.AwesomeQRCode.create(AwesomeQRCode.java:92) System.err: at com.github.sumimakito.awesomeqr.AwesomeQRCode.access$700(AwesomeQRCode.java:22) System.err: at com.github.sumimakito.awesomeqr.AwesomeQRCode$Renderer$1.run(AwesomeQRCode.java:526)

Exemplo

After last update, i simple don't know how to use this!
Please upload just one exemplo of using

Could not find com.waynejo:androidndkgif:0.3.3

Hello!
Bintray repo for dependency com.waynejo:androidndkgif:0.3.3 not work. Please fix it

Execution failed for task ':app:mergeDebugNativeLibs'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.waynejo:androidndkgif:0.3.3.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/waynejo/androidndkgif/0.3.3/androidndkgif-0.3.3.pom
- https://repo.maven.apache.org/maven2/com/waynejo/androidndkgif/0.3.3/androidndkgif-0.3.3.pom
- https://jitpack.io/com/waynejo/androidndkgif/0.3.3/androidndkgif-0.3.3.pom
Required by:
project :app > com.github.SumiMakito:AwesomeQRCode:1.2.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.