Có chương trình dòng lệnh nào có thể chuyển đổi hình ảnh thành hình ảnh nghệ thuật ASCII không?


19

Có một chương trình dòng lệnh (dành cho Linux) có thể chuyển đổi một hình ảnh thành nghệ thuật ascii và sau đó lưu đầu ra đó dưới dạng một hình ảnh, ví dụ như jpg hoặc png?

Để minh họa những gì tôi cần, tôi muốn chuyển đổi hình ảnh dưới đây thành nghệ thuật ascii nhập mô tả hình ảnh ở đây

Đầu ra mà tôi mong muốn từ một chương trình phải giống với chương trình này, được tạo bằng cách chụp ảnh màn hình đầu ra của trình chuyển đổi hình ảnh sang ascii (đầu ra là văn bản thuần túy)

nhập mô tả hình ảnh ở đây

Tôi biết rằng GIMP có khả năng lưu hình ảnh dưới dạng nghệ thuật ascii và aview cũng có thể chuyển đổi hình ảnh thành ascii. Tuy nhiên, cái trước không thể được thực hiện thông qua dòng lệnh và cái sau chỉ cho phép bạn xem đầu ra, không lưu nó (tôi không muốn dùng đến ảnh chụp màn hình của đầu ra).

Tôi cũng biết rằng libcaca có thể lưu kết quả đầu ra của nó vào một hình ảnh, nhưng nó chỉ xuất ra ascii đầy màu sắc, như bên dưới.

nhập mô tả hình ảnh ở đây

Được thực hiện bằng cách chuyển đổi hình ảnh nguồn thành thang độ xám và sau đó bằng lệnh sau:

img2txt -W 70 -f tga input.jpg > output.tga

Lý do muốn có một chương trình dòng lệnh là xử lý hàng loạt một thư mục chứa đầy hình ảnh.


1
Tôi chưa bao giờ thử nó, nhưng tôi biết rằng có thể chuyển văn bản sang convert(ImageMagick). Nếu bạn đặt đầu ra -f của img2txt thành ansi (chứ không phải màu ansi), bạn có thể chuyển kết quả để chuyển đổi (hoặc phần mềm phù hợp khác)
horatio

@horatio: convert dường như mong đợi một đầu vào tập tin và từ chối đọc từ một đường ống. Chúng tôi có thể làm điều đó thông qua một tập tin tạm thời nào.
Takkat

Câu trả lời:


7

Bạn có thể sử dụng mã python này mà tôi đã tạo để tạo nghệ thuật ascii từ hình ảnh tĩnh và video:

https://gist.github.com/lindylex/9374326

Ví dụ đầu ra

Nguyên nhập mô tả hình ảnh ở đây

Đầu ra nghệ thuật ASCII ( python ascii_movie_image_ver_1.py cat.jpg 4 10) nhập mô tả hình ảnh ở đây


2
các liên kết đến và đi, ngay cả khi đó là trang web của riêng bạn ... bạn có thể vui lòng thêm hai ảnh chụp màn hình "trước" và "sau" bằng cách sử dụng mã của mình không?
Ilan

4
@Ilan Tôi đã thêm một ví dụ và chỉ vào kho lưu trữ git công khai
hellocatfood

14

Trong trường hợp bạn dường như đang chạy Linux, bạn có thể ghép các ứng dụng lại với nhau một cách dễ dàng để có được kết quả mong muốn. Điều này sau đó cũng có thể được kết hợp trong tập lệnh xử lý hàng loạt của bạn.

Ví dụ dưới đây sử dụng jp2a , một trình chuyển đổi mạnh mẽ từ JPG sang ASCII-art với nhiều tùy chọn để đạt được kết quả mong muốn (tham khảo trang hướng dẫn). Sau đó, chúng tôi tiếp tục xử lý tệp văn bản ASCII kết quả thành hình ảnh bằng cách sử dụng chuyển đổi từ bộ ImageMagick . Một lần nữa có nhiều lựa chọn để tinh chỉnh kết quả. Cả hai ứng dụng có thể có sẵn từ kho lưu trữ phân phối của bạn.

Bên dưới tập lệnh mẫu sẽ tạo ra một hình ảnh nghệ thuật ASCII (định dạng tùy thuộc vào phần mở rộng chúng tôi cung cấp, .jpgdành cho JPEG) từ hình ảnh JPEG đầu vào. Nguồn được hiển thị với chiều rộng 160 ký tự ở 6 pt. Điều này sau đó sẽ chỉ phù hợp với kích thước trang mặc định như được xác định trước từ chuyển đổi.

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2

Đây có lẽ là gần nhất tôi sẽ nhận được đầu ra mong muốn của tôi. Cảm ơn!
hellocatfood

Có cách nào để xác định chiều rộng là một cái gì đó khác 835pxkhông? Tôi muốn chuyển đổi nghệ thuật ascii thành 1920x1080hình nền nhưng khi tôi vượt qua -resize 1920x1080tùy chọn thì chiều rộng vẫn còn 835px.

@awashburn: kích thước hình ảnh được xác định theo số ký tự (chiều rộng) và kích thước điểm. Phóng to kích thước cho sản lượng lớn hơn hoặc chia tỷ lệ hình ảnh thu được trong lần chạy thứ hai.
Takkat

1
Đối với người dùng MacOS: jp2a cũng có sẵn thông qua homebrew và đang chạy : brew install jp2a.
k0pernikus

1
Cũng xem xét một đầu ra trực tiếp đến html trong một số trường hợp : jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Bạn có thể chỉ định bộ ký tự ưa thích của mình cho kết xuất (bạn sẽ phải thoát các ký tự đại diện nếu bạn muốn sử dụng chúng). Đối với jp2a xem thêm AUR cho Arch .

2

Trong Node.js Knockout 2012, đã có một bài đăng chiến thắng lấy nguồn cấp dữ liệu video webcam và nhổ một "nguồn cấp dữ liệu ascii":

Asciigram

Trang Asciigram

Asciigram là một "công cụ năng suất" cho phép bạn tạo video và hình ảnh ASCII bằng webcam của mình. Bạn cũng có thể tạo hình ảnh ASCII kéo hình ảnh lên trang. [Liên kết]

Đó không phải là dòng lệnh chính xác, nhưng có lẽ bạn có thể trang bị thêm cho nhu cầu của mình. Thư viện họ sử dụng để chuyển đổi hình ảnh thành ascii được gọi là Jscii .


1
Nó chỉ xuất văn bản và không hình ảnh. Ngoài ra, đây không phải là một chương trình dòng lệnh
hellocatfood

2

Tôi sử dụng jp2a cho nghệ thuật ascii. Đơn giản để sử dụng từ dòng lệnh:

jp2a --width=76 file.jpg

Và có thể kiểm tra kết quả trực tuyến tại asciiconvert.com .


jp2a đã được liệt kê và liên kết của bạn không thêm bất cứ thứ gì cả (không mở được).
usr2564301

1

Bạn dường như đang sử dụng Linux và đã biết libcaca. Có một lib khác thực hiện chính xác những gì bạn nói (Image to Ascii trên dòng lệnh): Aalib .

Có rất nhiều chương trình làm điều này. Cái này hoạt động cả trên Linux và windows . Không sử dụng các thư viện bên ngoài, mã nguồn đầy đủ có sẵn, v.v ...


Theo như tôi biết Aalib không thể lưu trực tiếp đầu ra của nó vào một hình ảnh - một số phương pháp liên quan đến ảnh chụp màn hình sẽ cần được sử dụng, điều này sẽ không đáng tin cậy đối với các hình ảnh lớn. Nếu có cách nào để làm điều đó bằng Aalib, bạn có thể cập nhật câu trả lời của mình không? Chương trình bạn đề cập có vẻ thực sự tốt. Nó có thực hiện chuyển đổi hàng loạt và có giao diện dòng lệnh cho nó không?
hellocatfood

1

Miễn là tôi biết rằng chương trình không có giao diện dòng lệnh, nhưng chuyển đổi hình ảnh thành văn bản và sau đó thành hình ảnh. Nguồn có sẵn, vì vậy bạn có thể sử dụng nó để viết công cụ của riêng bạn.

Bạn nói đúng, aalib không xuất hình ảnh, nhưng nó xuất văn bản. Cũng như nhiều chương trình khác hoạt động trên dòng lệnh.

Nếu bạn đang sử dụng Linux, có một chương trình dòng lệnh gọi là asciitopgm sẽ chuyển đổi văn bản ascii thành bitmap. Đây là một phần của gói netpbm.

Vì vậy, bạn có thể sử dụng kết hợp các công cụ:

  1. aalib để vẽ một hình ảnh bằng văn bản
  2. asciitopgm để tạo một bitmap pgm với tệp văn bản.
  3. (tùy chọn) Sử dụng chuyển đổi (Từ gói Imagemagick) để chuyển đổi pgm sang bất kỳ định dạng raster nào khác mà bạn muốn.

Tôi nghĩ bạn có thể làm những gì bạn muốn theo cách này.


0

Vâng, có một công cụ được gọi là jp2avề cơ bản chuyển đổi hình ảnh jpg thành nghệ thuật ascii.

Ví dụ:

$ jp2a skull.jpg

Bản gốc Skull.jpg

nhập mô tả hình ảnh ở đây

Nghệ thuật đầu ra

nhập mô tả hình ảnh ở đây

Hãy chắc chắn để sử dụng hình ảnh jpg. Nếu hình ảnh của bạn ở một số định dạng khác, bạn có thể thay đổi nó bằng cách

$ convert skull.png skull.jpg

1
Xin chào và chào mừng đến với GDSE! Đây dường như là một câu trả lời trùng lặp. Bạn có thể cải thiện nó bằng cách chỉnh sửa nó hoặc cuối cùng nó có thể bị xóa.
tò mò
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.