Introduction
QR codes are everywhere—from marketing materials to product packaging. They offer a quick and easy way to share information. In this tutorial, we’ll use the Segno library to create stunning QR codes in Python. Segno is known for its simplicity and high-quality output.
Why Choose Segno?
Segno is a modern library for creating QR codes that stands out for several reasons:
- High-Quality Output: Segno generates high-quality QR codes that are visually appealing and highly readable.
- Simplicity: It has a straightforward API that makes it easy to use, even for beginners.
- Customizability: Segno allows extensive customization, including changing colors and adding logos.
- No Dependencies: Unlike some other libraries, Segno does not require external libraries for image processing, making it lightweight and easy to install.
- Error Correction: It supports different levels of error correction, ensuring the QR codes are robust against damage.
Step 1: Install the Segno Library
First, you’ll need to install Segno. Open your terminal and run:
<span class="line"><span style="color: #88C0D0">pip</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">install</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">segno</span></span>
Step 2: Basic QR Code Generation
Create a Python file named qr_generator.py
and add the following code to generate a basic QR code:
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> segno</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file_name</span><span style="color: #ECEFF4">):</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># Create a QR code object</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> segno</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">make</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># Save the QR code as an image file</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">save</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scale</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">"QR code saved as </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Example usage</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> __name__ </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">__main__</span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF"> data </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the data to encode in the QR code: </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> file_name </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the file name to save the QR code (e.g., qr_code.png): </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> file_name</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
Explanation:
- segno.make(data): Creates a QR code object with the given data.
- qr.save(file_name, scale=10): Saves the QR code image with a scale of 10 for better quality.
Step 3: Customizing the QR Code
Segno allows you to customize the appearance of your QR codes. Here’s how you can modify the code to change the color and add a logo
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> segno</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_custom_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file_name</span><span style="color: #ECEFF4">):</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> segno</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">make</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># Customize the QR code</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> qr</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">to_image</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">fill</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">blue</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">back_color</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">white</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># Optionally, add a logo</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># logo = Image.open('logo.png')</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># qr = segno.ImageWithLogo(qr, logo, size=50)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">save</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scale</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">"Custom QR code saved as </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Example usage</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> __name__ </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">__main__</span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF"> data </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the data to encode in the QR code: </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> file_name </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the file name to save the QR code (e.g., custom_qr_code.png): </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_custom_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> file_name</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
Explanation:
- qr.to_image(fill=’blue’, back_color=’white’): Changes the QR code color to blue with a white background.
- ImageWithLogo: (Commented out) This shows how you might add a logo if you choose to include it.
Step 4: Advanced Features
Segno also supports advanced features like adding error correction levels and setting the QR code size. Here’s an example:
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> segno</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_advanced_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file_name</span><span style="color: #ECEFF4">):</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> segno</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">make</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">error</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">H</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">version</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">1</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># Customize the QR code</span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> qr</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">to_image</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">fill</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">green</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">back_color</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">white</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF"> qr</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">save</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scale</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">"Advanced QR code saved as </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">file_name</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Example usage</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> __name__ </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">__main__</span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF"> data </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the data to encode in the QR code: </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> file_name </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">input</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">Enter the file name to save the QR code (e.g., advanced_qr_code.png): </span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">generate_advanced_qr_code</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> file_name</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
Explanation:
- error=’H’: Sets the error correction level to high.
- version=1: Defines the version of the QR code.
Conclusion
Congratulations! You’ve learned how to create stunning QR codes using the Segno library in Python. With Segno’s high-quality output and customization options, you can generate QR codes that not only function perfectly but also look great. Whether for personal projects or professional applications, Segno provides an excellent tool for all your QR code needs.