Giới thiệuNhiều ứng dụng sử dụng hình ảnh kỹ thuật số, và với điều này, thường cần phải xử lý các hình ảnh được sử dụng. Nếu bạn đang xây dựng ứng dụng của mình với Python và cần thêm các tính năng xử lý hình ảnh vào nó, có nhiều thư viện mà bạn có thể sử dụng. Một số người phổ biến là OpenCV, SCIKIT-IMAGE, PYTHON Hình ảnh và gối. Show
Chúng tôi sẽ không tranh luận về thư viện nào là tốt nhất ở đây; Họ đều có giá trị của họ. Bài viết này sẽ tập trung vào Gối, một thư viện mạnh mẽ cung cấp một loạt các tính năng xử lý hình ảnh và rất đơn giản để sử dụng. Gối là một cái nĩa của Thư viện hình ảnh Python (PIL). PIL là một thư viện cung cấp một số quy trình tiêu chuẩn để thao tác hình ảnh. Đó là một thư viện mạnh mẽ nhưng chưa được cập nhật kể từ năm 2009 và không hỗ trợ Python 3. Gối xây dựng trên này, thêm nhiều tính năng và hỗ trợ cho Python 3. Nó hỗ trợ một loạt các định dạng tệp hình ảnh như PNG, JPEG, PPM, GIF, TIFF và BMP. Chúng ta sẽ xem cách thực hiện các hoạt động khác nhau trên các hình ảnh như cắt xén, thay đổi kích thước, thêm văn bản vào hình ảnh, xoay, gryscaling, v.v., sử dụng thư viện này. Cài đặt và thiết lập dự ánTrước khi cài đặt gối, bạn nên biết điều sau đây:
Chúng tôi cung cấp hướng dẫn về cách cài đặt gối bên dưới, nhưng bạn nên kiểm tra hướng dẫn cài đặt trong trường hợp các phiên bản gối sau này tình cờ yêu cầu một số thư viện yêu cầu trước được cài đặt trước. Bạn có thể cài đặt gối với 7 như được hiển thị:
Để làm theo, bạn có thể tải xuống các hình ảnh (lịch sự của Unplash) mà chúng tôi sẽ sử dụng trong bài viết. Bạn cũng có thể sử dụng hình ảnh của riêng bạn. Tất cả các ví dụ sẽ cho rằng các hình ảnh cần thiết nằm trong cùng thư mục với tệp tập lệnh Python đang được chạy. Đối tượng hình ảnhMột lớp quan trọng trong thư viện hình ảnh Python là lớp 8. Nó được xác định trong mô -đun 8 và cung cấp hình ảnh PIL về việc có thể thực hiện các hoạt động thao tác nào. Một thể hiện của lớp này có thể được tạo theo nhiều cách: bằng cách tải hình ảnh từ một tệp, tạo hình ảnh từ đầu hoặc là kết quả của việc xử lý các hình ảnh khác. Chúng ta sẽ thấy tất cả những thứ này được sử dụng.Để tải một hình ảnh từ một tệp, chúng tôi sử dụng hàm 0 trong mô -đun 8, chuyển nó đường dẫn đến hình ảnh.
Nếu thành công, các điều trên trả về một đối tượng 8. Nếu có một vấn đề mở tệp, ngoại lệ 3 sẽ được nêu ra.Sau khi có được một đối tượng 8, giờ đây bạn có thể sử dụng các phương thức và thuộc tính được xác định bởi lớp để xử lý và thao tác nó. Hãy bắt đầu bằng cách hiển thị hình ảnh. Bạn có thể làm điều này bằng cách gọi phương thức 5 trên đó. Điều này hiển thị hình ảnh trên trình xem bên ngoài (thường là xem trước trên macOS, XV trên Unix và chương trình sơn trên Windows).
Bạn có thể nhận được một số chi tiết về hình ảnh bằng các thuộc tính của đối tượng.
Để biết thêm về những gì bạn có thể làm với lớp 8, hãy xem tài liệu.Thay đổi loại hình ảnhKhi bạn hoàn thành việc xử lý một hình ảnh, bạn có thể lưu nó vào một tệp với phương thức 7, chuyển trong tên sẽ được sử dụng để dán nhãn tệp hình ảnh. Khi lưu một hình ảnh, bạn có thể chỉ định một tiện ích mở rộng khác với bản gốc của nó và hình ảnh đã lưu sẽ được chuyển đổi thành định dạng được chỉ định.
Trên đây tạo ra một đối tượng hình ảnh được tải với hình ảnh 8 và lưu nó vào một tệp mới, 9 Gối xem phần mở rộng tệp đã được chỉ định là PNG và do đó, nó chuyển đổi nó thành PNG trước khi lưu nó vào tệp. Bạn có thể cung cấp một đối số thứ hai cho 7 để chỉ định rõ ràng định dạng tệp. 1 này sẽ làm điều tương tự như 7 trước đó. Thông thường, không cần thiết phải cung cấp đối số thứ hai này vì gối sẽ xác định định dạng lưu trữ tệp để sử dụng từ tiện ích mở rộng tên tệp, nhưng nếu bạn đang sử dụng các tiện ích mở rộng không chuẩn, thì bạn phải luôn chỉ định định dạng theo cách này.Thay đổi kích thước hình ảnhĐể thay đổi kích thước một hình ảnh, bạn gọi phương thức 3 trên nó, chuyển theo đối số tuple hai số nguyên đại diện cho chiều rộng và chiều cao của hình ảnh thay đổi kích thước. Hàm không sửa đổi hình ảnh đã sử dụng; Thay vào đó, nó trả về một hình ảnh khác với kích thước mới.
Phương thức 3 trả về một hình ảnh có chiều rộng và chiều cao khớp chính xác với giá trị được truyền. Đây có thể là những gì bạn muốn, nhưng đôi khi bạn có thể thấy rằng các hình ảnh được trả lại bởi chức năng này không lý tưởng. Điều này chủ yếu là do hàm không tính đến tỷ lệ khung hình của hình ảnh, do đó bạn có thể kết thúc với một hình ảnh trông có vẻ kéo dài hoặc bị vắt.Bạn có thể thấy điều này trong hình ảnh mới được tạo từ mã trên: 5. Nó trông hơi vắt theo chiều ngang.Nếu bạn muốn thay đổi kích thước hình ảnh và giữ tỷ lệ khung hình của chúng, thì thay vào đó bạn nên sử dụng hàm 6 để thay đổi kích thước chúng. Điều này cũng có một đối số tuple hai số nguyên thể hiện chiều rộng tối đa và chiều cao tối đa của hình thu nhỏ.
Trên đây sẽ dẫn đến một hình ảnh có kích thước 400x267, đã giữ tỷ lệ khung hình của hình ảnh gốc. Như bạn có thể thấy dưới đây, điều này dẫn đến một hình ảnh đẹp hơn. Một sự khác biệt đáng kể khác giữa các hàm 3 và 6 là hàm 3 'thổi bay' một hình ảnh nếu các tham số được đưa ra lớn hơn hình ảnh gốc, trong khi hàm 6 không. Ví dụ, được đưa ra một hình ảnh có kích thước 400x200, một cuộc gọi đến 1 sẽ tạo ra một hình ảnh có kích thước lớn hơn 1200x600; Do đó, hình ảnh sẽ mất một số định nghĩa và có khả năng bị mờ so với bản gốc. Mặt khác, cuộc gọi đến 2 bằng hình ảnh gốc sẽ dẫn đến hình ảnh giữ kích thước 400x200 của nó vì cả chiều rộng và chiều cao đều nhỏ hơn chiều rộng và chiều cao tối đa được chỉ định.Cắt xénKhi một hình ảnh được cắt, một vùng hình chữ nhật bên trong hình ảnh được chọn và giữ lại trong khi mọi thứ khác bên ngoài khu vực bị loại bỏ. Với thư viện gối, bạn có thể cắt một hình ảnh bằng phương pháp 3 của lớp 8. Phương pháp lấy một bộ hộp xác định vị trí và kích thước của vùng bị cắt và trả về một đối tượng 8 đại diện cho hình ảnh bị cắt. Các tọa độ cho hộp là (trái, trên, phải, thấp hơn). Phần cắt bao gồm cột bên trái và hàng trên của pixel và đi lên (nhưng không bao gồm) cột bên phải và hàng dưới cùng của pixel. Điều này được giải thích tốt hơn với một ví dụ.
Đây là hình ảnh kết quả: Thư viện hình ảnh Python sử dụng một hệ tọa độ bắt đầu bằng (0, 0) ở góc trên bên trái. Hai giá trị đầu tiên của hộp hộp chỉ định vị trí bắt đầu phía trên bên trái của hộp crop. Các giá trị thứ ba và thứ tư xác định khoảng cách tính theo pixel từ vị trí bắt đầu này về phía hướng bên phải và dưới cùng. Các tọa độ đề cập đến các vị trí giữa các pixel, vì vậy vùng trong ví dụ trên là chính xác là 500x300 pixel. Dán một hình ảnh lên một hình ảnh khácGối cho phép bạn dán một hình ảnh lên một hình ảnh khác. Một số trường hợp sử dụng ví dụ trong đó điều này có thể hữu ích trong việc bảo vệ các hình ảnh có sẵn công khai bằng cách thêm các hình mờ trên chúng, việc xây dựng thương hiệu hình ảnh bằng cách thêm logo của công ty và trong bất kỳ trường hợp nào khác cần phải hợp nhất hai hình ảnh. Dán được thực hiện với hàm 6. Điều này sửa đổi đối tượng 8 tại chỗ, không giống như các chức năng xử lý khác mà chúng tôi đã xem xét cho đến nay trả về một đối tượng 8 mới. Bởi vì điều này, trước tiên chúng tôi sẽ tạo một bản sao của hình ảnh demo của chúng tôi trước khi thực hiện dán để chúng tôi có thể tiếp tục với các ví dụ khác với một hình ảnh không biến đổi.
Ở trên, chúng tôi tải trong hai hình ảnh, 9 và 0, sau đó tạo một bản sao của cái trước với 1. Chúng tôi muốn dán hình ảnh logo lên hình ảnh được sao chép và chúng tôi muốn nó được đặt ở góc dưới bên phải. Điều này được tính toán và lưu trong một tuple. Tuple có thể là 2-tuple cho góc trên bên trái, 4-tuple xác định tọa độ bên trái, trên, phải và dưới tọa độ pixel hoặc 2 (giống như (0, 0)). Sau đó, chúng tôi chuyển phần này cho 6 cùng với hình ảnh sẽ được dán.Bạn có thể thấy kết quả dưới đây. Đó không phải là kết quả mà chúng tôi đã mong đợi. Theo mặc định, khi bạn thực hiện dán, các pixel trong suốt được dán dưới dạng pixel rắn, do đó hộp màu đen (màu trắng trên một số OSS) xung quanh logo. Hầu hết thời gian, đây không phải là điều bạn muốn. Bạn không thể có hình mờ bao gồm nội dung hình ảnh cơ bản. Chúng tôi thà có các pixel trong suốt xuất hiện như vậy. Để đạt được điều này, bạn cần chuyển trong một đối số thứ ba cho hàm 6. Đối số này là đối tượng hình ảnh mặt nạ minh bạch. Mặt nạ là một đối tượng hình ảnh trong đó giá trị alpha có ý nghĩa, nhưng các giá trị màu xanh lá cây, đỏ và xanh của nó bị bỏ qua. Nếu mặt nạ được đưa ra, 6 chỉ cập nhật các vùng được chỉ định bởi mặt nạ. Bạn có thể sử dụng hình ảnh 6, 7 hoặc 8 cho mặt nạ. Dán hình ảnh RGBA và cũng sử dụng nó làm mặt nạ sẽ dán phần mờ của hình ảnh nhưng không phải là nền trong suốt của nó. Nếu bạn sửa đổi dán như hình dưới đây, bạn nên có một logo dán với pixel trong suốt.
Hình ảnh quayBạn có thể xoay hình ảnh bằng gối bằng phương pháp 9. Điều này có một đối số số nguyên hoặc float biểu thị các độ để xoay một hình ảnh và trả về một đối tượng hình ảnh mới của hình ảnh được xoay. Việc xoay được thực hiện ngược chiều kim đồng hồ. 0Ở trên, chúng tôi lưu hai hình ảnh vào đĩa: một hình quay ở 90 độ, hình kia ở 180. Các hình ảnh kết quả được hiển thị bên dưới. Theo mặc định, hình ảnh xoay giữ kích thước của hình ảnh gốc. Điều này có nghĩa là đối với các góc khác với bội số của 180, hình ảnh sẽ được cắt và/hoặc đệm để phù hợp với kích thước ban đầu. Nếu bạn nhìn kỹ vào hình ảnh đầu tiên ở trên, bạn sẽ nhận thấy rằng một số trong đó đã được cắt để phù hợp với chiều cao ban đầu và các cạnh của nó đã được đệm với nền đen (pixel trong suốt trên một số OSS) để phù hợp với chiều rộng ban đầu. Ví dụ dưới đây cho thấy điều này rõ ràng hơn. 1Hình ảnh kết quả được hiển thị bên dưới: Để mở rộng kích thước của hình ảnh xoay để phù hợp với toàn bộ chế độ xem, bạn chuyển một đối số thứ hai sang 9 như hình dưới đây. 2Bây giờ nội dung của hình ảnh sẽ được hiển thị đầy đủ và kích thước của hình ảnh sẽ tăng lên để tính đến điều này. Lật hình ảnhBạn cũng có thể lật hình ảnh để có được phiên bản gương của họ. Điều này được thực hiện với hàm 1. Phải mất một trong các tùy chọn sau: 2, 3, 4, 5, 6 7 hoặc 8. 3Hình ảnh kết quả có thể được nhìn thấy dưới đây. Vẽ trên hình ảnhVới gối, bạn cũng có thể vẽ trên một hình ảnh bằng mô -đun hình ảnh. Bạn có thể vẽ các đường, điểm, hình elip, hình chữ nhật, vòng cung, bitmap, hợp âm, lát bánh, đa giác, hình dạng và văn bản. 4Trong ví dụ, chúng tôi tạo một đối tượng hình ảnh với phương thức 9. Điều này trả về một đối tượng 8 không có hình ảnh được tải. Sau đó chúng tôi thêm một hình chữ nhật và một số văn bản vào hình ảnh trước khi lưu nó.Biến đổi màuChuyển đổi giữa các chế độThư viện gối cho phép bạn chuyển đổi hình ảnh giữa các biểu diễn pixel khác nhau bằng phương pháp 1. Nó hỗ trợ chuyển đổi giữa các chế độ 7 (Greyscale), 3 và 4.Trong ví dụ dưới đây, chúng tôi chuyển đổi hình ảnh từ chế độ 3 thành 7 (độ chói), sẽ dẫn đến hình ảnh màu xám. 5Tách và hợp nhất các dảiBạn cũng có thể chia một hình ảnh nhiều băng tần (chẳng hạn như RGB) thành các dải riêng lẻ bằng phương pháp 7. 7 Tạo hình ảnh mới, mỗi hình chứa một dải từ hình ảnh gốc.Bạn có thể hợp nhất một tập hợp các hình ảnh băng đơn thành một hình ảnh đa băng tần mới bằng cách sử dụng hàm 9. 9 có một chế độ và một bộ ảnh hình ảnh và kết hợp chúng thành một hình ảnh mới. 6Trong mã trên, chúng tôi chia một hình ảnh RGB thành các dải riêng lẻ, trao đổi chúng và sau đó hợp nhất chúng. Dưới đây là hình ảnh kết quả. Cải tiến hình ảnhGối cho phép bạn tăng cường hình ảnh bằng cách điều chỉnh độ tương phản, màu sắc, độ sáng và độ sắc nét của nó bằng cách sử dụng các lớp trong mô -đun 01. 7Ở trên, chúng tôi điều chỉnh độ tương phản hình ảnh theo hệ số 02. Yếu tố được sử dụng trong các lớp nâng cao là một giá trị dấu phẩy động xác định mức độ tăng cường. Một hệ số 03 trả về một bản sao của hình ảnh gốc; Các yếu tố thấp hơn có nghĩa là ít hơn của sự tăng cường cụ thể và giá trị cao hơn nhiều hơn. Không có hạn chế đối với giá trị này.Bạn có thể thấy hình ảnh nâng cao dưới đây. Dưới đây, chúng tôi tăng màu của hình ảnh. Nếu chúng ta sử dụng hệ số 04, chúng ta sẽ có được hình ảnh đen trắng. 8Dưới đây chúng tôi làm cho hình ảnh sáng hơn. Một yếu tố của 04 sẽ tạo ra một hình ảnh màu đen. 9Dưới đây chúng tôi làm cho hình ảnh sắc nét hơn. Một yếu tố tăng cường của 04 sẽ tạo ra một hình ảnh mờ và hệ số 07 sẽ cho một hình ảnh được mài giũa. 0Ngoài ra: Thêm xác thực Auth0 vào ứng dụng PythonTrước khi kết thúc bài viết, chúng ta hãy xem cách bạn có thể thêm xác thực bằng Auth0 vào ứng dụng Python. Ứng dụng chúng ta sẽ xem xét được tạo bằng bình, nhưng quy trình này tương tự đối với các khung web Python khác. Thay vì tạo một ứng dụng từ đầu, tôi đã kết hợp một ứng dụng đơn giản mà bạn có thể tải xuống để theo dõi. Đây là một ứng dụng thư viện đơn giản cho phép người dùng tải hình ảnh lên máy chủ và xem các hình ảnh đã tải lên. Nếu bạn đã tải xuống các tệp dự án, bạn sẽ tìm thấy hai thư mục bên trong thư mục chính: 08 và 09. Đúng như tên gọi, 08 là dự án chúng ta sẽ bắt đầu và thêm Auth0 vào.Để chạy mã, tốt hơn là tạo một môi trường ảo và cài đặt các gói cần thiết ở đó. Điều này ngăn chặn sự lộn xộn của gói và xung đột phiên bản trong trình thông dịch Python toàn cầu của hệ thống. Chúng tôi sẽ tạo ra một môi trường ảo với Python 3. Phiên bản này hỗ trợ môi trường ảo một cách tự nhiên và không yêu cầu tải xuống một tiện ích bên ngoài (VirtualEnv), như trường hợp của Python 2.7. Sau khi tải xuống các tệp mã, hãy thay đổi thiết bị đầu cuối của bạn để trỏ đến thư mục 11. 1Tạo môi trường ảo với lệnh sau. 2Sau đó kích hoạt nó với (trên macOS và Linux): 3Trên Windows: 4Để hoàn tất thiết lập, hãy cài đặt các gói được liệt kê trong tệp aborment.txt với: 5Điều này sẽ cài đặt 12, 13, 14, 15, 16, 17 và các phụ thuộc của chúng. Khi 13 được cài đặt, bạn có thể nhận được thông báo lỗi trong lần đọc thiết bị đầu cuối của mình 19. Từ những gì tôi đã thấy, các gói cần thiết sẽ được cài đặt và thiết lập được thực hiện mà bạn cần phải làm bất cứ điều gì (bạn sẽ thấy thông báo 20 trong thiết bị đầu cuối). 13 sẽ được cài đặt thành công và dự án demo sẽ hoạt động tốt. Bạn có thể đọc thêm về thông báo lỗi ở đâySau đó, cuối cùng, chạy ứng dụng. 6Mở http: // localhost: 3000/trong trình duyệt của bạn và bạn sẽ xem trang sau. Khi bạn đi đến http: // localhost: 3000/gallery, bạn sẽ thấy một trang trống. Bạn có thể đi đến http: // localhost: 3000/tải lên và tải lên một số hình ảnh sau đó sẽ xuất hiện trong bộ sưu tập. Khi một hình ảnh được tải lên, một bản sao nhỏ hơn của nó được tạo bằng hàm 6 mà chúng tôi đã xem trước đó, sau đó hai hình ảnh được lưu - bản gốc vào thư mục 23 và thư mục 24 vào hình thu nhỏ.Bộ sưu tập hiển thị các hình thu nhỏ có kích thước nhỏ hơn và chỉ hiển thị hình ảnh lớn hơn (bên trong một phương thức) khi nhấp vào hình thu nhỏ. Khi ứng dụng đứng, bất kỳ người dùng nào cũng có thể tải lên một hình ảnh. Điều này có thể không lý tưởng. Có thể tốt hơn là đặt một số bảo vệ đối với hành động này để ngăn chặn lạm dụng hoặc ít nhất là theo dõi tải lên người dùng. Đây là nơi Auth0 xuất hiện. Với Auth0, chúng tôi sẽ có thể thêm xác thực vào ứng dụng với số lượng công việc tối thiểu. Để đơn giản của ứng dụng, hầu hết các chức năng của nó nằm trong tệp 25. Ở đây, bạn có thể thấy các trình xử lý tuyến đường thiết lập. Hàm 26 xử lý các cuộc gọi đến 27. Đây là nơi hình ảnh được xử lý trước khi được lưu. Chúng tôi sẽ bảo mật tuyến đường này với Auth0. 7Thiết lập Auth0Để thiết lập ứng dụng với AUTH0, trước tiên hãy đăng ký tài khoản AUTH0, sau đó điều hướng đến bảng điều khiển. Nhấp vào nút Tạo ứng dụng và điền tên của ứng dụng (hoặc để nó mặc định). Chọn các ứng dụng web thông thường từ danh sách loại ứng dụng, sau đó tạo ứng dụng.Create Application button and fill in the name of the application (or leave it at its default). Select Regular Web Applications from the application type list, then Create the application. Xin lưu ý: Nếu bạn được đưa đến màn hình bắt đầu, nhấp vào nút Tạo ứng dụng, nằm trong khu vực được dán nhãn tích hợp Auth0 vào ứng dụng của bạn. Bạn sẽ được đưa đến công nghệ nào bạn đang sử dụng cho dự án của mình? Màn hình, ở đây chỉ cần nhấp vào nút Bỏ qua tích hợp, sẽ đưa bạn đến tab Cài đặt cho ứng dụng, nơi bạn có thể truy cập ID máy khách, Bí mật máy khách và tên miền.Getting Started screen, click on the Create Application button, which is in the area labeled Integrate Auth0 into your application. You will be taken to the What technology are you using for your project? screen, in here just click the Skip Integration button, which will take you to the Settings tab for the application, where you can access the client ID, client secret, and domain. Sau khi ứng dụng đã được tạo, có thể truy xuất tab Cài đặt trong đó ID máy khách, Bí mật máy khách và tên miền có thể được truy xuất. Đặt URL gọi lại được phép thành 28 và cho phép đăng xuất URL thành 29 sau đó lưu các thay đổi bằng nút ở cuối trang.Settings tab where the client ID, Client Secret, and Domain can be retrieved. Set the Allowed Callback URLs to 28 and Allowed Logout URLs to 29 then save the changes with the button at the bottom of the page.Quay trở lại dự án của bạn, tạo một tệp có nhãn 30 và lưu nó ở gốc của dự án. Thêm thông tin đăng nhập máy khách AUTH0 của bạn vào tệp này. Nếu bạn đang sử dụng phiên bản, hãy nhớ không đặt tệp này theo phiên bản. Chúng tôi sẽ sử dụng giá trị của 31 làm khóa bí mật của ứng dụng. Bạn có thể/nên thay đổi nó. 8Thêm một tệp khác có tên 32 vào thư mục gốc của dự án và thêm các hằng số sau vào nó. 9Tiếp theo, sửa đổi phần đầu của tệp 25 như được hiển thị - từ câu lệnh đầu tiên đến điểm ngay trước định nghĩa tuyến đầu tiên ( 34). 0Chúng tôi sử dụng 35 để tải các biến môi trường từ tệp 30.Sau đó chúng tôi đặt ứng dụng 37. Ứng dụng sẽ sử dụng các phiên, cho phép lưu trữ thông tin cụ thể cho người dùng từ yêu cầu này sang yêu cầu tiếp theo. Điều này được thực hiện trên đầu cookie và ký các cookie bằng mật mã. Điều này có nghĩa là ai đó có thể nhìn vào nội dung của cookie của bạn nhưng không thể tìm ra thông tin cơ bản hoặc để sửa đổi thành công nó trừ khi họ biết khóa bí mật được sử dụng để ký.Tiếp theo, chúng tôi lưu thông tin xác thực AUTH0 của chúng tôi trong một số hằng số mà chúng tôi sẽ sử dụng sau này và thêm trình xử lý lỗi ( 38). Chúng tôi sử dụng trình trang trí 39 trên trình xử lý lỗi của chúng tôi, cấu hình bình để gọi chức năng này khi các trường hợp ngoại lệ của loại 40 được nâng lên. Trình xử lý lỗi làm cho lỗi dễ đọc hơn bằng cách đặt chúng vào đối tượng JSON.Sau đó, chúng tôi khởi tạo một ứng dụng khách OAuth của Flask và đăng ký ứng dụng của chúng tôi. Tiếp theo, thêm các chức năng sau vào tệp 25 trước các định nghĩa xử lý tuyến đường. 42 phải đến trước bất kỳ định nghĩa xử lý tuyến đường nào nếu không lỗi 43 sẽ được nêu ra. 1Ở đây chúng tôi xác định một trình trang trí sẽ đảm bảo rằng người dùng được xác thực trước khi họ có thể truy cập một tuyến đường cụ thể. Hàm thứ hai chỉ đơn giản là trả về 44 hoặc 45 tùy thuộc vào việc có một số dữ liệu người dùng từ AUTH0 được lưu trữ trong đối tượng phiên.Tiếp theo, sửa đổi các hàm 46 và 26 như được hiển thị. 2Trong 46, chúng tôi chuyển một số biến cho mẫu 49. Chúng tôi sẽ sử dụng những thứ này sau này.Chúng tôi thêm bộ trang trí 50 vào hàm 26. Điều này sẽ đảm bảo rằng các cuộc gọi đến 27 chỉ có thể thành công nếu người dùng được đăng nhập. Không chỉ người dùng không được xác thực không thể truy cập trang 53 mà còn không thể đăng dữ liệu lên tuyến đường.Ở cuối hàm, chúng tôi chuyển biến 54 cho mẫu 53.Tiếp theo, thêm chức năng sau vào tệp. 3Trên đây sẽ được gọi bởi máy chủ AUTH0 sau khi xác thực người dùng. Đó là đường dẫn mà chúng tôi đã thêm vào các URL gọi lại trên bảng điều khiển Auth0. Trình xử lý trao đổi mã mà Auth0 gửi đến URL gọi lại để biết mã thông báo truy cập và mã thông báo ID. Mã thông báo truy cập được sử dụng để gọi điểm cuối 56 để lấy hồ sơ người dùng. Sau khi thu được thông tin người dùng, chúng tôi lưu trữ nó trong đối tượng 57. Kiểm tra tài liệu để xem thông tin người dùng khác được trả về bởi /userInfoAllowed Callback URLs on the Auth0 Dashboard. The handler exchanges the code that Auth0 sends to the callback URL for an Access Token and an ID Token. The Access Token is used to call the 56 endpoint to get the user profile. After user information is obtained,
we store it in the 57 object. Check the documentation to see the other user information returned by /userinfoSửa đổi 58 như hình dưới đây. 4Ở trên, chúng tôi kiểm tra trạng thái đăng nhập của người dùng và hiển thị một tin nhắn khác cho phù hợp. Chúng tôi cũng thêm một liên kết đăng xuất nếu người dùng được đăng nhập. Để xác thực, ứng dụng sẽ sử dụng đăng nhập Universal của Auth0. Điều này sẽ trình bày một biểu mẫu đăng nhập/đăng ký/có thể tùy chỉnh, nhưng có thể tùy chỉnh. Thêm hai tuyến sau vào 25 5Trong 60, chúng tôi gọi hàm 61 được sử dụng để đăng nhập người dùng thông qua đăng nhập Universal. Nó có một URL chuyển hướng, Auth0 chuyển hướng trình duyệt sau khi ủy quyền đã được cấp cho người dùng.Chúng tôi cũng thêm một tuyến đường sẽ đăng xuất người dùng. Khi triển khai chức năng đăng xuất trong một ứng dụng, thường có ba lớp phiên bạn cần xem xét:
Trong mã trên, chúng tôi đối phó với hai cái đầu tiên. Nếu chúng tôi chỉ xóa phiên với 62, thì người dùng sẽ được đăng xuất khỏi ứng dụng, nhưng họ sẽ không được đăng xuất khỏi Auth0. Khi sử dụng lại ứng dụng, xác thực sẽ được yêu cầu để tải lên hình ảnh. Nếu họ cố gắng đăng nhập, tiện ích đăng nhập sẽ hiển thị tài khoản người dùng được đăng nhập trên Auth0 và người dùng sẽ chỉ phải nhấp vào email để lấy Auth0 để gửi thông tin đăng nhập của họ trở lại ứng dụng, sau đó sẽ được lưu đến đối tượng phiên. Tại đây, người dùng sẽ không được yêu cầu nhập lại mật khẩu của họ.Bạn có thể thấy vấn đề ở đây. Sau khi người dùng đăng xuất khỏi ứng dụng, một người dùng khác có thể đăng nhập khi chúng trên máy tính đó. Vì vậy, cũng cần phải đăng nhập người dùng ra khỏi Auth0. Điều này được thực hiện với chuyển hướng đến 63. Chuyển hướng người dùng đến URL này xóa tất cả các cookie đăng nhập một lần do Auth0 đặt cho người dùng.Mặc dù không phải là một thông lệ phổ biến, bạn có thể buộc người dùng cũng phải đăng xuất khỏi nhà cung cấp danh tính của họ bằng cách thêm tham số 64 Truy vấnString vào URL đăng xuất: 65.Chúng tôi thêm một tham số 66 vào URL có giá trị là URL mà Auth0 sẽ chuyển hướng đến sau khi đăng xuất người dùng. Để hoạt động này, URL phải được thêm vào URL đăng xuất được phép trên bảng điều khiển Auth0, mà chúng tôi đã làm trước đó.Allowed Logout URLs on the Auth0 Dashboard, which we did earlier.Cuối cùng, trong 67, bạn có thể thêm các mục sau trước thẻ 68. 6Điều này sẽ hiển thị tên người dùng đã đăng nhập. Nhìn vào hồ sơ người dùng để xem những gì thông tin người dùng khác có sẵn cho bạn. Thông tin có sẵn sẽ được xác định bởi những gì được lưu trên máy chủ. Chẳng hạn, nếu người dùng chỉ sử dụng xác thực email/mật khẩu, thì bạn sẽ không thể nhận được 69 của họ (tên của họ sẽ là giá trị trước 70 trong email của họ) hoặc 71, nhưng nếu họ sử dụng một trong những Các nhà cung cấp danh tính như Facebook hoặc Google, sau đó bạn có thể nhận được dữ liệu này.Chạy ứng dụng. Bạn sẽ không thể có được biểu mẫu tải lên bằng cách điều hướng đến 27. Đi đến trang chủ và sử dụng liên kết đăng nhập để hiển thị tiện ích đăng nhập.Sau khi xác thực, bạn sẽ được chuyển hướng đến trang 73.
Sự kết luậnTrong bài viết này, chúng tôi đã đề cập đến một số hoạt động xử lý hình ảnh phổ biến hơn được tìm thấy trong các ứng dụng. Gối là một thư viện mạnh mẽ, và chúng tôi chắc chắn đã không thảo luận tất cả những gì nó có thể làm. Nếu bạn muốn tìm hiểu thêm, hãy chắc chắn đọc tài liệu. Nếu bạn đang xây dựng một ứng dụng Python yêu cầu xác thực, hãy xem xét sử dụng Auth0 vì nó chắc chắn sẽ giúp bạn tiết kiệm nhiều thời gian và công sức. Sau khi đăng ký, việc thiết lập ứng dụng của bạn với AUTH0 khá đơn giản. Nếu bạn cần trợ giúp, bạn có thể xem qua tài liệu hoặc đăng câu hỏi của bạn trong phần bình luận bên dưới. Làm cách nào để thay đổi kích thước một hình ảnh trong mã?Một trong những cách đơn giản nhất để thay đổi kích thước hình ảnh trong HTML là sử dụng các thuộc tính chiều cao và chiều rộng trên thẻ IMG. Các giá trị này chỉ định chiều cao và chiều rộng của phần tử hình ảnh. Các giá trị được đặt trong pxel CSS.using the height and width attributes on the img tag. These values specify the height and width of the image element. The values are set in px i.e. CSS pixels.
Làm cách nào để thay đổi kích thước hình ảnh CV2 trong Python?Kích thước mới có thể được chỉ định:.. Bằng tay; chiều cao, chiều rộng = src.Shape [: 2] dst = cv2.resize (src, (2*chiều rộng, 2*chiều cao), nội suy = cv2.inter_cubic). Bởi một yếu tố tỷ lệ. DST = CV2. Thay đổi kích thước (src, none, fx = 2, fy = 2, nội suy = cv2 .. Làm thế nào để tôi thay đổi kích thước một hình ảnh trong một danh sách trong Python?Bạn có thể thay đổi kích thước nhiều hình ảnh trong Python với thư viện PIL tuyệt vời và một trợ giúp nhỏ của thư viện HĐH (hệ điều hành).Bằng cách sử dụng hàm Os.ListDir (), bạn có thể đọc tất cả các tên tệp trong một thư mục. Sau đó, tất cả những gì bạn phải làm là tạo một vòng lặp để mở, thay đổi kích thước và lưu mỗi hình ảnh trong thư mục.By using os. listdir() function you can read all the file names in a directory. After that, all you have to do is to create a for loop to open, resize and save each image in the directory.
Làm cách nào để có được kích thước của một hình ảnh trong Python?Open () được sử dụng để mở hình ảnh và sau đó là thuộc tính của hình ảnh được sử dụng để có được chiều cao và chiều rộng của hình ảnh. width and . height property of Image are used to get the height and width of the image.
Làm cách nào để giảm kích thước của một JPEG trong Python?GetSize (Image_Name) # In kích thước trước khi nén/thay đổi kích thước in ("[*] Kích thước trước khi nén:"Để giảm kích thước hình ảnh img = img.resize ((int (img.size [0] * new_size_ratio), int (img.img = img. resize((int(img. size[0] * new_size_ratio), int(img. |