Help us understand the problem. What is going on with this article?

コロナ時代の新常識、オンラインプロフィール交換

概要

QRコードのついたオンライン会議用の背景画像を作れるアプリを作った。

https://geneta.min-cla.work/

QRコードがついた背景画像のユースケース

ビジネス向けのビデオ会議でLinkedInやFacebook、Eight(sansan)などの自分のビジネス的なプロフィールを連携するQRコードを背景にビデオチャットする。

イメージ

スクリーンショット 2020-05-23 18.45.31.png

  • QRコードはサンプルとして適当に作ったプロフィールページにリンクさせていますが、LinkedIn等のプロフィールシェア用のリンクを使うと使い勝手が良さそうです。
  • 背景画像は以下のツイートから拝借しました。

使うメリット

ビデオ会議中に名刺交換の感覚で繋がれる。

モチベーション

コロナ時代に頑張る人たちのために何かしらの貢献ができないかと考えていて、ふと思いついたアイディアを形にしました。

嘘です。
サイト内に自分の連絡先を貼って、女性からの連絡を待っています。
下心です。

コード

 
技術系のブログなので、コード貼っておきます。
小一時間で調べたどこかのコピペなので一切参考にならないと思います。

import com.google.zxing.BarcodeFormat
import com.google.zxing.client.j2se.MatrixToImageWriter
import com.google.zxing.qrcode.QRCodeWriter
import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.multipart.MultipartFile
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.File
import java.lang.Exception
import java.util.*
import javax.imageio.ImageIO

 -----------------------
   関係ないところ省略
 -----------------------

   @PostMapping("/generate")
    fun generate(@RequestParam("image") image: MultipartFile,
                 @RequestParam("content") content: String,
                 @RequestParam("xPosition") xPosition: Int?,
                 @RequestParam("yPosition") yPosition: Int?,
                 @RequestParam("qrSize") qrSize: Int?,
                 model: Model): String {
        val bu1 = ImageIO.read(image.inputStream)
        val width = bu1.width
        val height = bu1.height
        val qrByteArray = QrcodeGenerator.generate(content, qrSize ?: width / 5 )
        val graphics1 = bu1.graphics
        val x = xPosition ?: width / 20
        val y = yPosition ?: height / 20
        try {
            val bais = ByteArrayInputStream(qrByteArray)
            val bu2 = ImageIO.read(bais)
            graphics1.drawImage(bu2, x, y, null)
            val now: String = System.currentTimeMillis().toString()
            ImageIO.write(bu1, "png", File("tmp/${now}.png"))
            val tmpFile = File("tmp/${now}.png")
            val ba64 = Base64.getEncoder().encodeToString(tmpFile.readBytes())
            model.addAttribute("file", "data:image/png;base64, $ba64")
            tmpFile.delete()
        } catch(e: Exception) {
            println(e)
            throw Exception()
        } finally {
            graphics1.dispose()
        }

        return "generate"
    }

    object QrcodeGenerator {
        fun generate(content: String, width: Int): ByteArray {
            val qrCodeBit = QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, width)
            val output = ByteArrayOutputStream()
            MatrixToImageWriter.writeToStream(qrCodeBit, "png", output)
            return output.toByteArray()
        }
    }

学び

aws ec2の無料枠で動かしています。
別件でドメイン持っていたので、使い回しました。
acmで証明書を効かせるためにec2一つでelbをたてて動かしてみたのですが、
ブラウザからリクエストしてec2に届くまで時間がかかっていました。(ec2ない方のネットワーにリクエストいっちゃってる?)
elbからcloudfrontにかえるとリクエストが早くなりました。

女の子の反応はよくなかった。

3count
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした