input('site_id')){ $site = Site::where(['id' => $request->input('site_id')])->first(); } else { $site = $coupon->site()->first(); } $logo_display = $coupon->coupon_logo_image; $product_image = $coupon->coupon_decoration_image; // ---- Masque dans lequel l'image finale sera placée $mask = imagecreatefromjpeg($mask_img); list($maskWidth, $maskHeight) = getimagesize($mask_img); // ---- Contact distributeur $text = $coupon->coupon_site_contact; $ImageFond = imagecreate(155, 27); $box1 = imagettfbbox(8, 0, $arial, $text); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond , 8 , 0, (155/2)-(abs($box1[4])-abs($box1[6]))/2, 23, $black, $arial, $text); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 748, 365, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ----- Mentions légales + RCS $txt_mentions = $coupon->coupon_legal_mentions." ".$coupon->coupon_rcs; $ImageMentionFond = imagecreate(415, 90); $boxMentions = imagettfbbox(7, 0, $arial, $txt_mentions); $white = imagecolorallocate($ImageMentionFond, 255, 255, 255); $black = imagecolorallocate($ImageMentionFond, 0, 0, 0); imagettftext($ImageMentionFond , 7 , 0, (415/2)-(abs($boxMentions[4])-abs($boxMentions[6]))/2, 23, $black, $arial, $txt_mentions); imagecolortransparent($ImageMentionFond, $white); imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond)); // ---- Copie la main dans le mask $hand = imagecreatefromjpeg($hand_picture); imagecopy($mask, $hand, 577, 2, 0, 0, imagesx($hand), imagesy($hand)); imagealphablending( $mask, false ); imagesavealpha( $mask, true ); // ---- Inscription du montant du BR $textMontant = number_format($coupon->coupon_value, 2 , ",", " "); $textEuro = "€"; $libReduc = "DE RÉDUCTION IMMÉDIATE"; $ImageFond = imagecreate(265, 200); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); $blue = imagecolorallocate($ImageFond, 8, 169, 223); $grey = imagecolorallocate($ImageFond, 219, 219, 221); $this->imagettftext_contour($ImageFond, 95, 0, 5, 110, $grey, $impact, $textMontant, $blue, 3, 3, 3, 3); $this->imagettftext_contour($ImageFond, 50, 0, 220, 55, $grey, $arial, $textEuro, $blue, 2, 2, 2, 2); $this->imagettftext_contour($ImageFond, 16, 0, 0, 150, $grey, $impact, $libReduc, $blue, 1, 1, 1, 1); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 360, 10, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ---- Inscription filigramme $txt_filigramme = strtoupper($site->site_libelle)." ".number_format($coupon->coupon_value, 2 , ",", " ")."€"; $line_filigramme=""; $textReduc=""; for ($i=0; $i < 11; $i++) { $line_filigramme .= $txt_filigramme." "; } $line_filigramme .= "\r\n"; for ($i=0; $i < 30; $i++) { $textReduc.= $line_filigramme; } $ImageFond = imagecreate(402, 240); $white = imagecolorallocate($ImageFond, 255, 255, 255); $blackOpac = imagecolorallocatealpha ($ImageFond, 0, 0, 0, 20); imagettftext($ImageFond , 11 , 25, -100, 11, $blackOpac, $arial, $textReduc); imagecolortransparent($ImageFond, $white); imagecopymerge($mask, $ImageFond, 349, 1, 0, 0, imagesx($ImageFond), imagesy($ImageFond), 30); // ---- Inscription produit valable $textReduc = $coupon->coupon_validity_text; $ImageFond = imagecreate(387, 200); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond , 12 , 0, 0, 14, $black, $arialbd, $textReduc); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 360, 170, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ---- Copie le produit dans le mask $pdt = imagecreatefromjpeg($product_image); imagecopy($mask, $pdt, 45, 26, 0, 0, imagesx($pdt), imagesy($pdt)); imagealphablending( $mask, false ); imagesavealpha( $mask, true ); // ---- Copie le logo dans le mask $logo = imagecreatefromjpeg($logo_display); imagecopy($mask, $logo, 767, 220, 0, 0, imagesx($logo), imagesy($logo)); imagealphablending( $mask, false ); imagesavealpha( $mask, true ); // ---- Créer le fichier final imagejpeg($mask, public_path('generation')."/".$coupon->coupon_code.".jpg"); // ---- Libère la mémoire associée aux images manipulées imagedestroy($logo); imagedestroy($pdt); imagedestroy($mask); return "generation/".$coupon->coupon_code.".jpg"; } function imagettftext_contour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut=1, $contour_bas=1, $contour_gauche=1, $contour_droite=1) { $coords_x=array(); $coords_y=array(); for ($i_y = -$contour_haut; $i_y <= $contour_bas; $i_y++) { $y_temp = @array_fill(0, $contour_gauche+$contour_droite+1, $i_y); $x_temp = array(); for ($i_x = -$contour_gauche; $i_x <= $contour_droite; $i_x++) { $x_temp[] = $i_x; } $coords_x = array_merge($coords_x, $x_temp); $coords_y = array_merge($coords_y, $y_temp); } $c = count($coords_x); for ($i=0; $i<$c; $i++) { imagettftext($image, $fontsize, $angle, $x+$coords_x[$i], $y+$coords_y[$i], $color_contour, $font, $text); } imagettftext($image, $fontsize, $angle, $x, $y, $color, $font, $text); } public function printCp($coupon, $contact){ $arial = public_path().'/generation/src/arial.ttf'; $arialbd = public_path().'/generation/src/arialbd.ttf'; $impact = public_path().'/generation/src/impact.ttf'; // ---- Masque dans lequel l'image finale sera placée $mask = imagecreatefromjpeg($coupon->coupon_image); list($maskWidth, $maskHeight) = getimagesize($coupon->coupon_image); // ---- Inscription de l'utilisateur et de la ville $libelle = "OFFRE RÉSERVÉE À"; $user = $contact->contact_prenom." ".$contact->contact_nom."\r\n".$contact->contact_cp. " ".$contact->contact_ville; $ImageFond = imagecreate(120, 40); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); $box1 = imagettfbbox(8, 0, $arial, $user); $box2 = imagettfbbox(8, 0, $arial, $libelle); imagettftext($ImageFond , 8 , 0, (120/2)-(abs($box2[4])-abs($box2[6]))/2, 10, $black, $arialbd, $libelle); imagettftext($ImageFond , 8 , 0, (120/2)-(abs($box1[4])-abs($box1[6]))/2, 25, $black, $arial, $user); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 770, 50, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ---- Inscription de la date de validité $libelle = "Valable jusqu'au :"; if($coupon->coupon_validity != 0){ $dateValidite = date('d/m/Y',strtotime("+".$coupon->coupon_validity." day")); }else{ $dateValidite = date('d/m/Y',strtotime("+30 day")); // 30 jours par défaut } $ImageFond = imagecreate(120, 40); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond , 8 , 0, 1, 8, $black, $arialbd, $libelle); imagettftext($ImageFond , 8 , 0, 20, 23, $black, $arial, $dateValidite); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 780, 142, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ---- Création code barre if($coupon->coupon_norme == 1 && strlen($contact->contact_cp)==4){ $textReduc = "Traitement ScanCoupon/HighCo Data Benelux"; }else{ $textReduc = "• Traitement ScanCoupon •"; } $ImageFond = imagecreate(270, 20); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond , 9 , 0, 0, 10, $black, $arialbd, $textReduc); if($coupon->coupon_norme == 1 && strlen($contact->contact_cp)==4){ imagecopy($mask, $ImageFond, 70, 225, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); }else{ imagecopy($mask, $ImageFond, 52, 322, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); } if($coupon->coupon_norme == 1 && strlen($contact->contact_cp)==4){ $codeBarre = imagecreatefromjpeg($coupon->coupon_gs1code); imageresolution($codeBarre, 72); list($width, $height) = getimagesize($coupon->coupon_gs1code); $r = $width / $height; $w = 285; $h = 150; if ($w/$h > $r) { $newwidth = $h*$r; $newheight = $h; } else { $newheight = $w/$r; $newwidth = $w; } $test = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($test, $codeBarre, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); imagecopy($mask, $test, 60, 242, 0, 0, imagesx($test), imagesy($test)); }else{ $codeBarre = $coupon->coupon_code.strtoupper($contact->contact_ref); $codeBarrePrint = $codeBarre; if( strpos($contact->contact_ref, "@") !== false){ $codeBarre = $coupon->coupon_code.strtolower($contact->contact_ref); $codeBarrePrint = $coupon->coupon_code.".@."; } $generator = new \Picqer\Barcode\BarcodeGeneratorPNG(); $base64 = $generator->getBarcode($codeBarrePrint, $generator::TYPE_CODE_128_A, 2 , 46); $barcodeImage = imagecreatefromstring($base64); imagecopy($mask, $barcodeImage, 52, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage)); $ImageFond = imagecreate(380, 15); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond , 11 , 0, 0, 14, $black, $arial, $codeBarre); imagecopy($mask, $ImageFond, 52, 390, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); } ob_start(); imagejpeg($mask, null, 100); $contents = ob_get_contents(); ob_end_clean(); $dataUri = "data:image/jpeg;base64," . base64_encode($contents); // ---- Libère la mémoire associée aux images manipulées imagedestroy($mask); imagedestroy($ImageFond); return $dataUri; } }