Создать миниатюры для текста?

10

Мне нужно создать эскизы для некоторых текстовых файлов. Очевидно, что система как-то способна сделать именно это (см. Снимок экрана). Есть ли способ получить доступ к этим изображениям и просто скопировать их для дальнейшего использования?

Или для этого есть специальная команда (инструмент)?

somefolder.png

Я посмотрел на это: миниатюра командной строки

И это: Как я могу проинструктировать Наутилуса предварительно генерировать эскизы?

Которые были полезны, но никто не мог иметь дело с текстом.

user10607
источник
@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
Якоб Влейм
источник
Является ли это решение постоянным?
2015 г.
Что вы подразумеваете под настойчивым? Скрипт создает иконки, или я неправильно понял вопрос?
Джейкоб Влейм
1
@Kasiya Чтобы использовать его в качестве рупора , см. Rlog.rgtti.com/2011/11/24/… и rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Наутилус обновит его автоматически. Хорошая идея; Теперь просто подумайте об использовании pygmentдля подсветки синтаксиса, и это будет идеально. Спасибо!
Rmano
2
@JacobVlijm не нужен. Просто поместите скрипт в нужном месте и записать /usr/share/thumbnailers/...файл и автоматически будет появится иконки и управлять системой (кэшируются, обновление изменения файлов и т.д.)
Rmano
1
@JacobVlijm, что угодно --- я понял. Я думаю, что ответ достаточно, как он есть. Жаль, что мы не можем использовать системный способ сделать это, но я начинаю предполагать, что он жестко запрограммирован в какой-то низкоуровневой библиотеке.
Rmano
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 библиотеку Python

    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  
    

похожий вопрос на SO

Prinz
источник
1
Хммм ... текстовый файл НЕ является текстовым файлом. Здесь есть довольно простое заблуждение. Текстовые файлы - это исходные тексты программ, журналы, файлы ".txt" и т. Д. Миниатюры офисных документов и PDF работают нормально.
Rmano
@Rmano: Работа с PDF - это метод, часто используемый программным обеспечением ECM при создании предварительных просмотров, даже для форматов, которые обычно никто не конвертирует в PDF, таких как файлы журналов. Так что это хорошая идея.
Николас Рауль