Skip to content

Commit 189de97

Browse files
committed
Add downloads in SVG or EPS format
1 parent 7c747a2 commit 189de97

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

qr_app/templates/qr_app/your-qr-page.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ <h1>Where does my QR code go?</h1>
6363
<p>Your QR code leads to <a href="{{ qr_url }}">{{ qr_url }}</a>. If you
6464
scan the QR code you should be redirected to there.</p>
6565

66+
<h1>Can I also have it in vector formats?</h1>
67+
68+
<p>Of course! You can get your QR code <a href="{{ qr_image_svg }}">in SVG format
69+
here</a> or <a href="{{ qr_image_eps }}">in EPS format here</a>. You might need to right
70+
click these images and select "Save link as" to save them to your computer. If you need
71+
any other format, you can probably use any online converter from the SVG format to
72+
whatever you want!</p>
73+
6674
<h1>Can I make another one?</h1>
6775

6876
<p>Of course, just <a href="/editor">click here to get back to the editor</a></p>

qr_app/urls.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,15 @@
2020
urlpatterns = [
2121
path('', views.index, name='index'),
2222
path('copyright/', views.copyright, name='copyright'),
23-
path('your-qr-image/<str:qr_secret>', views.get_qr_from_secret, name='get_qr_from_secret'),
23+
path('your-qr-image/<str:qr_secret>',
24+
views.get_qr_from_secret,
25+
name='get_qr_from_secret'),
26+
path('your-qr-image-svg/<str:qr_secret>',
27+
views.get_qr_from_secret_svg,
28+
name='get_qr_from_secret_svg'),
29+
path('your-qr-image-eps/<str:qr_secret>',
30+
views.get_qr_from_secret_eps,
31+
name='get_qr_from_secret_eps'),
2432
path('your-qr/<str:qr_secret>', views.get_your_qr_page, name='get_your_qr_page'),
2533
path('create_qr_arr/', views.create_qr_from_array, name='create_qr_from_array'),
2634
]

qr_app/views.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ def index(request):
3939
def copyright(request):
4040
return render(request, 'qr_app/copyright.html', {});
4141

42-
def get_temp_name():
43-
return '/tmp/' + next(tempfile._get_candidate_names()) + '.png'
42+
def get_temp_name(extension='.png'):
43+
return '/tmp/' + next(tempfile._get_candidate_names()) + extension
4444

4545

4646
def save_file(f):
@@ -120,6 +120,8 @@ def get_your_qr_page(request, qr_secret):
120120
if ri is not None:
121121
return render(request, 'qr_app/your-qr-page.html', context={
122122
'qr_image': reverse('get_qr_from_secret', args=[qr_secret]),
123+
'qr_image_svg': reverse('get_qr_from_secret_svg', args=[qr_secret]),
124+
'qr_image_eps': reverse('get_qr_from_secret_eps', args=[qr_secret]),
123125
'qr_url': ri.to_url,
124126
})
125127
else:
@@ -149,3 +151,37 @@ def get_qr_from_secret(request, qr_secret):
149151
return HttpResponse(f.read(), content_type="image/png")
150152
else:
151153
return HttpResponseNotFound('<h1>QR code not found</h1>')
154+
155+
156+
def get_qr_from_secret_svg(request, qr_secret):
157+
ri = get_ri_from_secret(qr_secret)
158+
if ri is not None:
159+
qr_data_utf8 = ri.qr_data_utf8
160+
qr = pyqrcode.create(
161+
qr_data_utf8, mode='alphanumeric',
162+
error=ri.errorCorrectionLevel, encoding='UTF-8')
163+
164+
qrfile = get_temp_name('.svg')
165+
qr.svg(qrfile, scale=5)
166+
167+
with open(qrfile, "rb") as f:
168+
return HttpResponse(f.read(), content_type="image/svg+xml")
169+
else:
170+
return HttpResponseNotFound('<h1>QR code not found</h1>')
171+
172+
173+
def get_qr_from_secret_eps(request, qr_secret):
174+
ri = get_ri_from_secret(qr_secret)
175+
if ri is not None:
176+
qr_data_utf8 = ri.qr_data_utf8
177+
qr = pyqrcode.create(
178+
qr_data_utf8, mode='alphanumeric',
179+
error=ri.errorCorrectionLevel, encoding='UTF-8')
180+
181+
qrfile = get_temp_name('.eps')
182+
qr.eps(qrfile, scale=5)
183+
184+
with open(qrfile, "rb") as f:
185+
return HttpResponse(f.read(), content_type="image/eps")
186+
else:
187+
return HttpResponseNotFound('<h1>QR code not found</h1>')

0 commit comments

Comments
 (0)