2

我正在研究简单的 qrcode laravel。我正在尝试将颜色以 rgba 格式(ajax)存储在数据库中以获取特定 id 的 qrcode 的背景颜色,并将其作为变量调用以更改 qr 代码的 bgcolor。我不能使用十六进制格式,因为 simpleqrcode 依赖项只接受 rgba 格式。

所以我已将 rgba 存储在数据库中,当我将其调用到控制器时,它会显示错误。遇到格式不正确的数值。我进一步研究,当我从数据库中调用颜色时,默认情况下它带有引号,我试图用 str_replace 替换它但没有用。

这是我的代码:

public function qrcode($id){
      $article = Article::find($id);
      $rgba = $article->bgcolor;
      $html = str_replace('"', '', $rgba);

      $image_path = \QrCode::format('png')
//              ->merge('../storage/app/public/'.$article->image, .15, true)
              ->size(200)

                ->backgroundColor($html)
              ->errorCorrection('H')


              ->generate('127.0.0.1:8000/articles/'.$article->id , '../public/Qrcodes'.$article->image);
// dd($article->bgcolor);
    // $image = '../public/'.$article->image;

      return view('articles.modify_qrcode', compact('article'));

错误

错误

有人告诉我更新作曲家。我已经更新了它。

4

1 回答 1

2

根据您的评论; dd($html); result: "135, 56, 56"

你编码

$rgba = $article->bgcolor;
$html = str_replace('"', '', $rgba);

$html将使用字符串值创建变量"135,56,56" 但是您需要 3 个整数变量$red$green并且$blue 因为backgroundColor(int $red, int $green, int $blue, ?int $alpha = null)分别采用 3 种颜色。

你能做的是;

$article = Article::find($id);
list($red, $green, $blue) = array_map('intval', explode(',', $article->bgcolor));

$image_path = \QrCode::format('png')
              ->size(200)
              ->backgroundColor($red, $green, $blue)
              ->errorCorrection('H')
              ->generate('127.0.0.1:8000/articles/'.$article->id , '../public/Qrcodes'.$article->image);

解释:

  • explode(',', $article->bgcolor)字符串 "135, 56, 56"转换为字符串数组: ["123"和]"56""56"
  • array_map('intval', [])将遍历字符串数组以将它们转换为int 数组: ["123"和] 将变为["56"和]"56"1235656
  • list($red, $green, $blue)数组值分配给每个变量;$red,$green$blue
于 2020-07-27T09:52:38.167 回答