Kaynağa Gözat

图片画图修改

ajun 4 yıl önce
ebeveyn
işleme
e18cbfc5f4
1 değiştirilmiş dosya ile 40 ekleme ve 19 silme
  1. 40 19
      app/Traits/DrawImage.php

+ 40 - 19
app/Traits/DrawImage.php

@@ -7,6 +7,7 @@ namespace App\Traits;
 use App\PrintPartImage;
 use Endroid\QrCode\QrCode;
 use Illuminate\Support\Facades\File;
+use Illuminate\Support\Str;
 use Intervention\Image\Facades\Image;
 use Picqer\Barcode\BarcodeGeneratorJPG;
 
@@ -14,7 +15,9 @@ trait DrawImage
 {
     public function draw($orderPackage, $template, $img = null)
     {
+
         if (!$img) $img = $this->getBgImg($template);
+
         $items = array_filter($template->value, function ($item) {
             return $item['type'] != 'bg';
         });
@@ -39,7 +42,7 @@ trait DrawImage
                     break;
             }
         }
-        return $img->response("jpg");
+        return $img;
     }
 
     private function getBgImg($template): \Intervention\Image\Image
@@ -69,15 +72,15 @@ trait DrawImage
             'text' => 1231313, 'border-width' => 0,
             'top' => 58, 'left' => 0, 'font-size' => 20
         ];
-        $textBox  = $this->getTextBox($item, '123123');
-        $bgImage->insert($textBox,'top-left',0,68);
+        $textBox = $this->getTextBox($item, '123123');
+        $bgImage->insert($textBox, 'top-left', 0, 68);
 
         $generatorPng = new BarcodeGeneratorJPG();
         $barCode = $generatorPng->getBarcode('0123456789', $generatorPng::TYPE_CODE_128_A, 1, 50);
 
-        $stripeCode = Image::make($barCode)->resize(382,50);
+        $stripeCode = Image::make($barCode)->resize(382, 50);
 
-        $bgImage->insert($stripeCode,'top-left',6,9)->resize(404*$params['scale'],92*$params['scale']);
+        $bgImage->insert($stripeCode, 'top-left', 6, 9)->resize(404 * $params['scale'], 92 * $params['scale']);
 
         return $img->insert($bgImage, 'top-left', $params['left'], $params['top']);
     }
@@ -100,36 +103,36 @@ trait DrawImage
     public function getTextBox($params, $text): \Intervention\Image\Image
     {
 
-        $bgImg = Image::canvas($params['width'],$params['height'],'#fff');
+        $bgImg = Image::canvas($params['width'], $params['height'], '#fff');
 
-        if ($params['border-width'] !== 0){
+        if ($params['border-width'] !== 0) {
             $borderWidth = $params['border-width'] * 2;
-            $paddingBgImage =  Image::canvas($params['width'],$params['height'],'#000');
-            $paddingImage = Image::canvas($params['width'] - $borderWidth,$params['height'] - $borderWidth,'#fff');
-            $paddingBgImage->insert($paddingImage,'top-left',intval($params['border-width']/2),intval($params['border-width']/2));
+            $paddingBgImage = Image::canvas($params['width'], $params['height'], '#000');
+            $paddingImage = Image::canvas($params['width'] - $borderWidth, $params['height'] - $borderWidth, '#fff');
+            $paddingBgImage->insert($paddingImage, 'top-left', intval($params['border-width'] / 2), intval($params['border-width'] / 2));
             $bgImg->insert($paddingBgImage);
         }
         $path_arr = ['fonts', 'simsun.ttc'];
         $x = $params['width'] / 2;
-        if($params['justify-content'] == 'center') $x = $params['width'] / 2;
-        if($params['justify-content'] == 'flex-start') $x = $params['width'] / 2;
+        if ($params['justify-content'] == 'center') $x = $params['width'] / 2;
+        if ($params['justify-content'] == 'flex-start') $x = $params['width'] / 2;
         $y = $params['height'] / 2;
-        if($params['align-items'] == 'center') $y = $params['height']  /2 ;
-        if($params['align-items'] == 'flex-start') $y = 0;
-        if($params['align-items'] == 'flex-end') $y = ($params['height']  - 22) /2 ;
+        if ($params['align-items'] == 'center') $y = $params['height'] / 2;
+        if ($params['align-items'] == 'flex-start') $y = 0;
+        if ($params['align-items'] == 'flex-end') $y = ($params['height'] - 22) / 2;
 
         // 字体路径
         $path = app('path.public') . (DIRECTORY_SEPARATOR . join(DIRECTORY_SEPARATOR, $path_arr));
         $aligns = [
             'flex-start' => 'right',
-            'center' =>  'center'
+            'center' => 'center'
         ];
         $vAligns = [
             'center' => 'center',
             'flex-start' => 'top',
             'flex-end' => 'bottom',
         ];
-        return $bgImg->text('0123456789', intval($x), intval($y), function ($font) use ($params, $path,$aligns,$vAligns) {
+        return $bgImg->text('0123456789', intval($x), intval($y), function ($font) use ($params, $path, $aligns, $vAligns) {
             $font->file($path);
             $font->size($params['font-size'] ?? 24);
             $font->align($aligns[$params['justify-content']]); // 水平对齐方式
@@ -149,9 +152,27 @@ trait DrawImage
         $qrCode = new QrCode($text ?? '123');
         $qrCode->setSize(100);
         $qrCode->setMargin(0);
-        $scale = $params['scale'] ??1;
-        return $img->insert(Image::make($qrCode->writeString())->resize(100 * $scale,100 * $scale), 'top-left', $params['left'], $params['top']);
+        $scale = $params['scale'] ?? 1;
+        return $img->insert(Image::make($qrCode->writeString())->resize(100 * $scale, 100 * $scale), 'top-left', $params['left'], $params['top']);
     }
 
+    public function getImage($base64, &$path): \Intervention\Image\Image
+    {
+        $img_name = Str::uuid() . '.png';
+        $path_arr = ['app', 'public', 'print'];
+        $dir_path = implode(DIRECTORY_SEPARATOR, $path_arr);
+        if (!file_exists(storage_path($dir_path))) mkdir(storage_path($dir_path));
+
+        $path_arr[] = 'image';
+        $dir_path = implode(DIRECTORY_SEPARATOR, $path_arr);
+        if (!file_exists(storage_path($dir_path))) mkdir(storage_path($dir_path));
+
+        $path_arr[] = $img_name;
+        $path = storage_path(implode(DIRECTORY_SEPARATOR, $path_arr));
+
+        $img = Image::make($base64);
+        $img->save($path);          // 图片保存
+        return $img;
+    }
 
 }