69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
declare(strict_types = 1);
 | 
						|
 | 
						|
namespace BaconQrCode;
 | 
						|
 | 
						|
use BaconQrCode\Common\ErrorCorrectionLevel;
 | 
						|
use BaconQrCode\Encoder\Encoder;
 | 
						|
use BaconQrCode\Exception\InvalidArgumentException;
 | 
						|
use BaconQrCode\Renderer\RendererInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * QR code writer.
 | 
						|
 */
 | 
						|
final class Writer
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Renderer instance.
 | 
						|
     *
 | 
						|
     * @var RendererInterface
 | 
						|
     */
 | 
						|
    private $renderer;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new writer with a specific renderer.
 | 
						|
     */
 | 
						|
    public function __construct(RendererInterface $renderer)
 | 
						|
    {
 | 
						|
        $this->renderer = $renderer;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Writes QR code and returns it as string.
 | 
						|
     *
 | 
						|
     * Content is a string which *should* be encoded in UTF-8, in case there are
 | 
						|
     * non ASCII-characters present.
 | 
						|
     *
 | 
						|
     * @throws InvalidArgumentException if the content is empty
 | 
						|
     */
 | 
						|
    public function writeString(
 | 
						|
        string $content,
 | 
						|
        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,
 | 
						|
        ?ErrorCorrectionLevel $ecLevel = null
 | 
						|
    ) : string {
 | 
						|
        if (strlen($content) === 0) {
 | 
						|
            throw new InvalidArgumentException('Found empty contents');
 | 
						|
        }
 | 
						|
 | 
						|
        if (null === $ecLevel) {
 | 
						|
            $ecLevel = ErrorCorrectionLevel::L();
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->renderer->render(Encoder::encode($content, $ecLevel, $encoding));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Writes QR code to a file.
 | 
						|
     *
 | 
						|
     * @see Writer::writeString()
 | 
						|
     */
 | 
						|
    public function writeFile(
 | 
						|
        string $content,
 | 
						|
        string $filename,
 | 
						|
        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,
 | 
						|
        ?ErrorCorrectionLevel $ecLevel = null
 | 
						|
    ) : void {
 | 
						|
        file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel));
 | 
						|
    }
 | 
						|
}
 |