Create Your Own Stunning QR Code Generator with Python: A Step-by-Step Guide

Spread your love to
Reading Time: 2 minutes

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:

  1. High-Quality Output: Segno generates high-quality QR codes that are visually appealing and highly readable.
  2. Simplicity: It has a straightforward API that makes it easy to use, even for beginners.
  3. Customizability: Segno allows extensive customization, including changing colors and adding logos.
  4. No Dependencies: Unlike some other libraries, Segno does not require external libraries for image processing, making it lightweight and easy to install.
  5. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *