使用ZXing生成二维码,可设置中间icon,边缘白色宽度为0
2017-11-17 本文已影响94人
xiaolei123
import android.graphics.Bitmap;
import android.graphics.Matrix;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.util.Hashtable;
/**
* Created by xiaolei on 2017/4/26.
*/
public class QRCodeUtil
{
// 生成QR图
public static Bitmap createImage(String text, int w, int h, Bitmap logo)
{
try
{
Bitmap scaleLogo = getScaleLogo(logo, w, h);
int offsetX = (w - scaleLogo.getWidth()) / 2;
int offsetY = (h - scaleLogo.getHeight()) / 2;
Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = new QRCodeWriter().encode(text,
BarcodeFormat.QR_CODE, w, h, hints);
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
if (x >= offsetX && x < offsetX + scaleLogo.getWidth() && y >= offsetY && y < offsetY + scaleLogo.getHeight())
{
int pixel = scaleLogo.getPixel(x - offsetX, y - offsetY);
if (pixel == 0)
{
if (bitMatrix.get(x, y))
{
pixel = 0xff000000;
} else
{
pixel = 0xffffffff;
}
}
pixels[y * w + x] = pixel;
} else
{
if (bitMatrix.get(x, y))
{
pixels[y * w + x] = 0xff000000;
} else
{
pixels[y * w + x] = 0xffffffff;
}
}
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, w, 0, 0, w, h);
return bitmap;
} catch (WriterException e)
{
e.printStackTrace();
}
return null;
}
private static Bitmap getScaleLogo(Bitmap logo, int w, int h)
{
if (logo == null) return null;
Matrix matrix = new Matrix();
float scaleFactor = Math.min(w * 1.0f / 5 / logo.getWidth(), h * 1.0f / 5 / logo.getHeight());
matrix.postScale(scaleFactor, scaleFactor);
Bitmap result = Bitmap.createBitmap(logo, 0, 0, logo.getWidth(), logo.getHeight(), matrix, true);
return result;
}
}