Through image generate QR-Code.
Один из элегантных генераторов QR-кодов.
Адрес проекта на Github: https://github.com/CasterWx/BitQR-Code.
Возьмите свой телефон и попробуйте отсканировать следующий QR-код!
Исходное изображение | Версия 3 |
---|---|
![]() |
![]() |
Версия 5 | Непосредственно составленный GIF | Разложение для генерации |
---|---|---|
![]() |
![]() |
![]() |
Исходный рисунок 1 | Исходный рисунок 2 | Исходный рисунок 3 |
---|---|---|
![]() |
![]() |
![]() |
GIF1 | GIF2 | GIF3 |
---|---|---|
![]() |
![]() |
![]() |
Разложение GIF на несколько кадров
Исходный GIF | Четвёртый кадр | Седьмой кадр | Десятый кадр |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Тринадцатый кадр | Шестнадцатый кадр | Двадцатый кадр | Генерация GIF |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Последняя статья 2018 года
В проекте импортируйте QRCode.jar, чтобы добавить зависимость:
<component name="libraryTable">
<library name="QRCode">
<CLASSES>
<root url="jar://$PROJECT_DIR$/src/lib/QRCode.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
Просто хочу отобразить фотографию девушки в школьной форме
BufferedImage writeImg = ImageIO.read(new File("школьная форма.jpg"));
BufferedImage bf = new BufferedImage(writeImg.getWidth(),writeImg.getHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bf.createGraphics() ;
gs.clearRect(0,0,bf.getWidth(),bf.getHeight());
gs.drawImage(writeImg,0,0,bf.getWidth(),bf.getHeight(),null);
writeImg — это прочитанное изображение, затем создаётся Graphics с размером, соответствующим этой фотографии.
gs.drawImage(writeImg,0,0,bf.getWidth(),bf.getHeight(),null);
Теперь можно нарисовать writeImg на Graphics.
Эффект |
---|
![]() |
Graphics2D gs = bf.createGraphics() ;
gs.setBackground(Color.white);
gs.clearRect(0,0,bf.getWidth(),bf.getHeight());
gs.drawImage(writeImg,0,0,bf.getWidth(),bf.getHeight(),null);
gs — это созданный холст, setBackground позволяет установить его цвет фона, также можно напрямую использовать drawImage() для рисования изображения.
gs.setColor(Color.BLACK);
gs.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f));
gs.fillRect(j*mini+begin,i*mini+begin,mini,mini );
Суть QR-кода состоит в двоичном представлении данных
Чёрно-белые квадраты QR-кода фактически представляют биты данных 0 и 1, нам нужно только преобразовать данные в массив байтов, а затем непосредственно нарисовать их на изображении в соответствии с массивом значений 0–1, чтобы создать соответствующий QR-код. qrcode.calQrcode(contentByte);
Таким образом можно создать массив cidesOut для представления чёрных и белых квадратов двумерного кода.
qrcode — это конфигурация генерации двумерного кода, включая коэффициент коррекции ошибок и версию Qrcode.
Qrcode qrcode = new Qrcode();
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
qrcode.setQrcodeVersion(3);
Двумерный код по своей сути является чёрно-белой рубашкой!!!
Двойной цикл for проходит по массиву cidesOut типа boolean, если значение true, то рисуется чёрный квадрат.
for (int i = 0; i < cidesOut.length; i++) {
for (int j = 0; j < cidesOut.length; j++) {
if (cidesOut[j][i]) {
gs.fillRect(j * mini + begin, i * mini + begin, mini, mini);
}
}
}
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.setRepeat(0);
e.start(newPic);
BufferedImage src[] = new BufferedImage[pic.length];
for (int i = 0; i < src.length; i++) {
e.setDelay(playTime);
src[i] = ImageIO.read(new File(pic[i]));
e.addFrame(src[i]); // Добавление в кадр
}
e.finish();
Сначала определяется класс для создания GIF.
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.start(newPic);
newPic представляет имя файла сгенерированного gif.
e.setDelay(playTime);
Устанавливается время задержки воспроизведения playTime.
e.setDelay(playTime);
src[i] = ImageIO.read(new File(pic[i])); e.addFrame(src[i]);
Наконец, изображение BufferedImage добавляется в кадр.
e.finish();
GIF |
---|
![]() |
GifDecoder gd = new GifDecoder();// Изображение для обработки
int status = gd.read(new FileInputStream(new File("marry.gif")));
if (status != GifDecoder.STATUS_OK) {
return;
}
Мы можем напрямую получить изображение каждого кадра и сохранить его локально.
for (int i = 0; i < gd.getFrameCount(); i++) {
// Получение кадра GIF
BufferedImage frame = gd.getFrame(i);
// Сохранение кадра локально
}
После разделения GIF на кадры мы можем добавить двумерный код к каждому кадру, а затем включить их в новый GIF.
for (int i = 0; i < gd.getFrameCount(); i++) {
// Получение кадра GIF
BufferedImage frame = gd.getFrame(i);
Graphics2D gs = frame.createGraphics() ;
gs.drawImage(frame,0,0,frame.getWidth(),frame.getHeight(),null);
int qrLength = frame.getHeight()-2*frame.getHeight()/10 ;
int mini = qrLength/cidesOut.length ;
int begin = (frame.getWidth() - mini*cidesOut.length)/2 ;
for(int k=0;k<cidesOut.length;k++){
for(int j=0;j<cidesOut.length;j++){
if(cidesOut[j][k]){
gs.setColor(Color.BLACK);
gs.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f));
gs.fillRect(j*mini+begin,k*mini+begin/4,mini,mini );
}
}
}
int delay = gd.getDelay(i);
ge.setDelay(delay);
ge.addFrame(frame);
Исходное изображение | GIF |
---|---|
![]() |
![]() |
Исходное изображение | GIF |
---|---|
![]() |
![]() |
Исходное изображение | GIF |
---|---|
![]() |
![]() |
Платёжная система Alipay | Платёжная система WeChat |
---|---|
![]() |
![]() |
BitQR-Code — это открытый проект, который можно использовать бесплатно. Однако по мере роста проекта ему также требуется соответствующее финансирование для поддержания и развития. Вы можете поддержать разработку BitQR-Code следующими способами. Ваше имя будет указано в репозитории GitHub и документации блога BitQR-Code.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )