|
|
@@ -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;
|
|
|
+ }
|
|
|
|
|
|
}
|