Створити ескізи для тексту?


10

Мені потрібно генерувати ескізи для деяких текстових файлів. Очевидно, що система якось має можливість робити саме це (див. Знімок екрана). Чи є спосіб отримати доступ до цих зображень і просто скопіювати їх для подальшого використання?

Або для цього є спеціальна команда (інструмент)?

somefolder.png

Я подивився на це: ескіз командного рядка

І це: Як я можу доручити Nautilus попередньо генерувати ескізи?

Які були корисні, але ніхто не міг мати справу з текстом.


@Rmano, якого розміру потрібні значки?
Яків Влійм

@JacobVlijm Ідея полягає у створенні ескізу --- основна форма - script -s width input_url output_fileце формат, який використовує nautilus. Дивіться, наприклад, rlog.rgtti.com/2011/11/24/… та пов’язану сторінку ...
Rmano

Відповіді:


5

Використання Imagemagick для створення текстових піктограм

Спираючись на той же принцип, що і тут , сценарій нижче створює текстовий значок із текстового файлу за допомогою Imagemagick.

Колір закругленого фонового зображення та колір тексту можна встановити в заголовку сценарію (а також у ряді інших властивостей).

введіть тут опис зображення

Що це робить
Він читає текстовий файл, приймає перші чотири рядки (встановлені n_lines = 4), перші сім символів (встановлюється n_chars = 10) кожного рядка і створює накладення над зображенням розміру, встановленого, наприклад psize = "100x100".

Як користуватись

Сценарій потрібно imagemagickвстановити:

sudo apt-get install imagemagick

Тоді:

  1. Скопіюйте сценарій у порожній файл
  2. Збережіть як create_texticon.py
  3. встановити в головному розділі:

    • колір тла піктограми
    • колір текстового шару ікони
    • Розмір створеної піктограми
    • Кількість рядків для відображення в іконі
    • Кількість (перших) символів у рядку для відображення у значку
    • Шлях, куди зберегти зображення
  4. Запустіть його своїм текстовим файлом як аргумент:

    python3 /path/to/create_texticon.py </path/to/textfile.txt>
    

Сценарій

#!/usr/bin/env python3
import subprocess
import sys
import os
import math

temp_dir = os.environ["HOME"]+"/"+".temp_iconlayers"
if not os.path.exists(temp_dir):
    os.mkdir(temp_dir)

# --- 
bg_color = "#DCDCDC"                                # bg color
text_color = "black"                                # text color
psize = [64, 64]                                    # icon size
n_lines = 4                                         # number of lines to show
n_chars = 9                                         # number of (first) characters per line
output_file = "/path/to/output/icon.png"            # output path here (path + file name)
#---

temp_bg = temp_dir+"/"+"bg.png"; temp_txlayer = temp_dir+"/"+"tx.png"
picsize = ("x").join([str(n) for n in psize]); txsize = ("x").join([str(n-8) for n in psize])

def create_bg():
    work_size = (",").join([str(n-1) for n in psize])
    r = str(round(psize[0]/10)); rounded = (",").join([r,r])
    command = "convert -size "+picsize+' xc:none -draw "fill '+bg_color+\
              ' roundrectangle 0,0,'+work_size+","+rounded+'" '+temp_bg
    subprocess.call(["/bin/bash", "-c", command])

def read_text():
    with open(sys.argv[1]) as src:
        lines = [l.strip() for l in src.readlines()]
        return ("\n").join([l[:n_chars] for l in lines[:n_lines]])

def create_txlayer():
    subprocess.call(["/bin/bash", "-c", "convert -background none -fill "+text_color+\
                      " -border 4 -bordercolor none -size "+txsize+" caption:"+'"'+read_text()+'" '+temp_txlayer])

def combine_layers():
    create_txlayer(); create_bg()
    command = "convert "+temp_bg+" "+temp_txlayer+" -background None -layers merge "+output_file
    subprocess.call(["/bin/bash", "-c", command])

combine_layers

Чи є це рішення стійким?
αғsnιη

Що ви маєте на увазі під стійким? Сценарій створює піктограми, чи я неправильно зрозумів питання?
Яків Влійм

1
@Kasiya Щоб використовувати його як ескіз, див. Rlog.rgtti.com/2011/11/24/… та rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus оновить його автоматично. Хороша ідея; тепер просто подумайте про використання pygmentдля синтаксису підсвічування, і це буде ідеально. Дякую!
Рмано

2
@JacobVlijm не потрібен. Просто скиньте скрипт у потрібне місце та напишіть /usr/share/thumbnailers/...файл, і піктограми автоматично з’являться та керуватимуться системою (кешовано, оновлено на зміну файлів тощо)
Rmano

1
@JacobVlijm все, що завгодно --- я отримав ідею. Я думаю, що відповіді достатньо, як є. Шкода, що ми не можемо використовувати системний спосіб цього робити, але я починаю припускати, що це важко закодовано в бібліотеці низького рівня.
Рмано

1

Ідея:

конвертуйте текстовий файл у pdf та використовуйте pdfdrawдля створення мініатюри.

unoconv - це програмне забезпечення, яке перетворює між різними документами, які розуміє офісний пакет OpenOffice.

Перевага цього методу: об'ємні ескізи майже для всього документа можна легко створити, створивши сценарій.

Дивіться суть кроків.

  1. Встановіть пакунок без голови OpenOffice

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Встановіть бібліотеку пітонів UNO

    sudo apt-get install python-uno unoconv
    
  3. Встановіть необхідні шрифти (особливо для міжнародної мови)

    Скопіюйте шрифти для /usr/share/fonts/truetype/запускуfc-cache

  4. Запустіть OpenOffice як послугу

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Перетворити документ у PDF за допомогою команди unoconv

    unoconv -f pdf __[filename]__
    
  6. Створіть мініатюру PDF за допомогою інструменту MuPDF

    pdfdraw -r 100 -o __[output-thumbnail]__ __[pdf-file]__ 1  
    

подібне питання про СО


1
Хммм ... текстовий файл НЕ файли текстового процесора. Тут є досить основна помилка. Текстовий файл - це програмні джерела, журнали, просто ".txt" файли тощо. Офісні документи та PDF-файли спрацьовують нормально.
Рмано

@Rmano: Перехід через PDF - це метод, який часто використовується програмним забезпеченням ECM при створенні попереднього перегляду, навіть для форматів, які зазвичай ніхто не конвертує у PDF, наприклад файли журналів. Отже, це гарна ідея.
Ніколя Рауль
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.