Trăn màu hsl

Hướng dẫn này sẽ hướng dẫn bạn thông tin chi tiết về một hình ảnh trực quan thay thế của mô hình màu RGB, được gọi là Độ bão hòa màu và Độ sáng. Nó được sử dụng rộng rãi trong các ứng dụng đồ họa và khác với RGB, nó gắn liền với nhận thức của chúng ta hơn. HSL là những phẩm chất chúng ta thường sử dụng để mô tả màu sắc trong cuộc sống hàng ngày của mình. Thay vào đó, RGB là một mô tả kỹ thuật hơn về cách tạo màu trên màn hình – và được lưu trữ trong bộ nhớ

Trăn màu hsl

Một tính năng đặc biệt của mô hình HSL là cách phân bổ màu sắc trong không gian. Thực tế, các sắc độ có tổ chức xuyên tâm, các màu của từng sắc độ được sắp xếp theo một lát cắt xuyên tâm. Thay vào đó, độ bão hòa và độ sáng là các kích thước tuyến tính. Chúng ta có thể biểu diễn tổng của hai kích thước tuyến tính và một kích thước góc bằng cách sử dụng một hình trụ (có lỗ dọc)

Chúng ta có thể giả định rằng các giá trị thuộc về kích thước tuyến tính dao động trong khoảng từ 0 đến 1, trong khi kích thước góc – hue – di chuyển qua 0 và 360. Giả định này không xuất phát từ nhu cầu kỹ thuật – trên thực tế, chúng tôi cũng sẽ sử dụng dấu phẩy động từ 0 đến 1 cho màu sắc – nhưng tôi tin rằng nó sẽ giúp mã của chúng tôi dễ truy cập hơn. Tại đây, bạn có thể thấy cách chúng ta sẽ tạo hệ số màu sắc từ một phép lặp trên một góc hình tròn đầy đủ, hãy chạy tập lệnh và kiểm tra đầu ra của bảng điều khiển

py

Cũng xem xét rằng hai chiều tuyến tính – độ bão hòa và độ sáng – có thể được hoán đổi trong mô hình 3D HSL, vì vậy chương trình của chúng tôi sẽ có thể thừa nhận nó. Các hình trụ sau đây đều là các biểu diễn hợp lệ của mô hình màu HSL

Trăn màu hsl

Tuy nhiên, hình ảnh tham chiếu trực quan hóa của chúng tôi là một đĩa hai chiều, nó có mối quan hệ nào với các hình trụ này? . Quy trình này sẽ yêu cầu một biến độc lập, để cho phép người dùng quyết định vị trí cắt xi lanh

Trăn màu hsl

Hãy bắt đầu lắp ráp một số mã. Trước hết, chúng ta cần chuyển đổi giá trị HSL thành RGB, vì Drawbot chỉ có thể chấp nhận giá trị RGB hoặc CMYK. Mô-đun colorsys từ thư viện tiêu chuẩn cung cấp chức năng hoàn hảo cho nhu cầu này hls_to_rgb(h, l, s)

py

hls_to_rgb() trả về một bộ có ba dấu phẩy động mà chúng ta có thể sử dụng trực tiếp vào hàm điền Drawbot. Thao tác này có thể đạt được theo hai cách, chúng ta có thể chọn từng phần tử đơn lẻ bằng cách sử dụng cú pháp truy cập cho các chuỗi

py

hoặc chúng ta có thể sử dụng giải nén lặp lại

py

Bây giờ chúng ta đã biết cách ghép nối hls_to_rgb() với các chức năng vẽ của Drawbot, hãy thử duyệt qua ba chiều khác nhau của mô hình màu HSL một cách riêng biệt. Kích thước góc - màu sắc - có thể được hiển thị thông qua một vòng hình bầu dục chứa đầy các màu sắc khác nhau

py

Kích thước tuyến tính - độ bão hòa và độ sáng - có thể được trình bày bằng một loạt các sọc. Lưu ý cấu trúc có điều kiện bên trong vòng lặp for, người dùng đã có thể chuyển đổi giữa độ bão hòa và độ sáng

py

Chúng tôi cũng có thể hiển thị chúng cùng một lúc, sử dụng cấu trúc hình ảnh ma trận

py

Nếu chúng ta sắp xếp ba đầu ra của tập lệnh trước bằng góc màu 0°, 120° và 240°, chúng ta sẽ nhận được ba bảng độ bão hòa/độ sáng cho các kênh RGB. đỏ, xanh lá cây và xanh dương

Trăn màu hsl
Trăn màu hsl

Làm thế nào chúng ta có thể trộn các kích thước tuyến tính với kích thước góc? . Chúng ta có thể tạo nó bằng cách sử dụng vòng lặp for lồng nhau – từ ví dụ về ma trận – kết hợp với vòng hình bầu dục. Trong ví dụ này, mỗi vòng đại diện cho một giá trị độ sáng khác nhau trong khi mỗi lát hình bầu dục đại diện cho một giá trị màu sắc khác nhau. Độ bão hòa không đổi. Đây là mã được sử dụng để tạo hình ảnh này

py

Trăn màu hsl

Chúng ta sắp hoàn thành, nhưng chúng ta vẫn phải tìm cách vẽ biểu đồ chuỗi vòng từ ví dụ ban đầu. Chúng tôi không thể sử dụng một chồng các vòng tròn có bán kính tăng dần, bởi vì chúng tôi không thể tô các vòng tròn bằng nhiều màu. Tuy nhiên, chúng ta có thể cắt các vòng tròn thành nhiều vòng cung - rất nhỏ -. Nếu chúng ta phóng to ví dụ ban đầu, chúng ta có thể thấy cách các đường dẫn khác nhau được sắp xếp 🔎

Drawbot cung cấp một nhóm chức năng để vẽ các đường dẫn Bézier trên canvas. Trong nhóm này nổi bật là hàm cung, công cụ chính xác mà chúng ta cần để giải quyết vấn đề này. Chức năng arc() cần được chấp nhận bởi các chức năng newPath()drawPath() để được đặt trên khung vẽ. Các đối số của nó là điểm tâm và bán kính của đường tròn chứa cung đó, cộng với các góc xác định phạm vi cung và hướng vẽ – theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ –

Trăn màu hsl

Nếu chúng ta kết hợp nhiều vòng cung với nhau bằng một nét dày, kết quả trên khung vẽ sẽ giống như một chiếc bánh rán phẳng, một vòng có nhiều vòng cung được tô màu bằng các màu khác nhau. Nếu chúng ta thay thế các hình bầu dục từ một trong các ví dụ trên, chúng ta có thể thu được cấu trúc nhiều vòng từ ví dụ ban đầu, chúng ta chỉ cần đảm bảo có một lỗ cho chiếc bánh rán

Trăn màu hsl

py

Tại thời điểm này, chúng tôi chỉ bỏ lỡ các chú thích. Chúng nên được định vị vào vòng lặp for bên ngoài, sau khi mỗi lát cắt giống nhau đã được đặt trên khung vẽ. Được coi là nhu cầu chuyển đổi ma trận – để xoay văn bản –, điều cần thiết là gói gọn phần mã này vào ngữ cảnh savedState()

py

Cũng lưu ý cách tôi tổ chức các kiểu của các thành phần khác nhau, các cung và chú thích. Tôi đã viết hai hàm riêng biệt trong đó tôi nhóm các hàm thuộc tính (_______8, fill(), hls_to_rgb(h, l, s)0, hls_to_rgb(h, l, s)1) và tôi đã xác định một số giá trị mặc định vào giao diện hàm. Bằng cách này, bạn có thể đổ một số logic mà không cấm một ứng dụng khác

Tại thời điểm này, chương trình đã hoạt động hoàn toàn, nhưng vẫn còn một số điều có thể được cải thiện. Họ là tùy chọn. Tôi thích mã của mình, ngay cả những tập lệnh đơn giản như thế này, càng mô-đun càng tốt, điều đó có nghĩa là tôi muốn đóng gói chiếc bánh rán HSL thành một hàm để có thể nhập nó từ một tập lệnh python khác khá dễ dàng. Bằng cách này, tôi cũng buộc phải rất chính xác trong việc xử lý không gian tên hàm. Tuyên bố chắc chắn về giải cứu, hơn là bất kỳ lệnh gọi hàm nào phải được gói gọn trong một cấu trúc có điều kiện hls_to_rgb(h, l, s)2. Theo cách này, bánh rán sẽ chỉ được vẽ nếu mô-đun được chạy rõ ràng, không phải nếu được nhập. Cuối cùng nhưng không kém phần quan trọng, hãy đảm bảo rằng tệp tập lệnh có tên tuân theo quy tắc định danh

Hơn nữa, tôi thích viết - và thường chạy - các tập lệnh của mình từ bên ngoài ứng dụng drawbot, để tận dụng các tính năng của IDE như linting mã, nhiều con trỏ và những thứ khác mà các lập trình viên yêu thích. Vì lý do này, tôi phải nhập rõ ràng bất kỳ chức năng drawbot nào tôi cần ở đầu tập lệnh. Ngoài ra, bản vẽ phải được bao gồm bởi các hàm hls_to_rgb(h, l, s)3 và hls_to_rgb(h, l, s)4 để bắt đầu ngăn xếp bản vẽ và sau đó làm sạch nó. Lưu hình ảnh, đặc biệt nếu nên khởi chạy tập lệnh từ thiết bị đầu cuối, nếu không, bạn sẽ không có bất kỳ phản hồi trực quan nào. Vì vậy, ở đây bạn có thể tìm thấy kết quả cuối cùng

py

Bạn có tò mò về cách tôi tạo ra các hình minh họa hình trụ màu không?