Como gerar miniaturas com antecedência (principalmente pdf) [duplicado]

2

Eu tenho um grande conjunto de documentos (150 GiB ~ 5000 arquivos) e gostaria de saber como pré-gerar miniaturas, de preferência a partir da linha de comando, de modo que quando eu navego para a pasta, eu não tenho para esperar que eles sejam criados.

    
por Scott Goodgame 15.02.2015 / 21:01

2 respostas

3

Graças aos comentários, decidi usar um dos scripts de este recomende AskUbuntu post.

Acabei de copiá-lo para um arquivo, salvei-o no meu ~ / bin (no meu caso como gerar miniaturas) e emiti chmod +x nele. Então eu apenas naveguei para a pasta ~ / Documents e corri generate-thumbnails * Não sei quanto tempo demorou, mas quando acordei no dia seguinte, tudo estava bem.

Esteja ciente de que você pode precisar instalar o gir1.2-gnomedesktop-3.0 :

sudo apt-get install gir1.2-gnomedesktop-3.0

Como não perde tempo gerando duplicatas, seria um trabalho cron de baixo impacto (após a primeira execução).

De um prompt de terminal crontab -e Se for a primeira vez que você edita o crontab, ele pedirá que você escolha um editor. Eu apenas uso o nano e darei os comandos do teclado para ele.

Adicione o seguinte ao final ...

0 4 * * * /home/user/bin/generate-thumbnails /home/user*
  • Ctl o Irá salvar o arquivo.
  • Ctl x Irá sair. (se você tiver um erro de sintaxe, ele informará e você poderá apenas crontab -e novamente. Isso configura o cron para ser executado às 4h todas as manhãs.
  • Se você quiser mudar ou olhar para outras opções do cron, o link é um bom lugar para descobrir opções .

Principais motivos para executar este script:

  • ele será recursado por subdiretórios
  • está ciente de duplicatas
  • funciona igualmente bem para vídeos
  • funcionará em outros DEs (alterno frequentemente com base no que estou fazendo)
  • seria bom para um cron job

Aqui está o script .... (Obrigado James Henstridge !!

#!/usr/bin/env python2
import os
import sys

from gi.repository import Gio, GnomeDesktop

def make_thumbnail(factory, filename):
    mtime = os.path.getmtime(filename)
    # Use Gio to determine the URI and mime type
    f = Gio.file_new_for_path(filename)
    uri = f.get_uri()
    info = f.query_info(
        'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
    mime_type = info.get_content_type()

    if factory.lookup(uri, mtime) is not None:
        print "FRESH       %s" % uri
        return False

    if not factory.can_thumbnail(uri, mime_type, mtime):
        print "UNSUPPORTED %s" % uri
        return False

    thumbnail = factory.generate_thumbnail(uri, mime_type)
    if thumbnail is None:
        print "ERROR       %s" % uri
        return False

    print "OK          %s" % uri
    factory.save_thumbnail(thumbnail, uri, mtime)
    return True

def thumbnail_folder(factory, folder):
    for dirpath, dirnames, filenames in os.walk(folder):
        for filename in filenames:
            make_thumbnail(factory, os.path.join(dirpath, filename))

def main(argv):
    factory = GnomeDesktop.DesktopThumbnailFactory()
    for filename in argv[1:]:
        if os.path.isdir(filename):
            thumbnail_folder(factory, filename)
        else:
            make_thumbnail(factory, filename)

if __name__ == '__main__':
    sys.exit(main(sys.argv))
    
por Scott Goodgame 16.02.2015 / 16:44
1

Script de bash (kudos a Tim). A partir do link, o seguinte script e comentários:

for i in *.jpg
do
djpeg $i | pnmscale -xysize 48 38 | cjpeg -opti -progr -qual ‘75%’ > TN_$i
echo $i processed
done
  • Isso fará com que as miniaturas dos arquivos terminem em .jpg e crie um thumbail com o nome TN _ *. jpg. Ajuste os parâmetros ao seu gosto.

  • Para miniaturas, muitas vezes você não quer usar o imagemagick ou converter ou algo assim; para o meu tamanho normal (48 × 38), cria um enorme 50K jpg quando existem outras maneiras de deixá-los muito menores:

  • Isso reduz o tamanho médio da imagem para cerca de 1K - mais adequado para uma página de miniaturas!

  • pnmscale será instalado por padrão

  • Instalando o djpeg e o cjpeg

    sudo apt-get install libjpeg-turbo-progs
    
  • edit: não funciona com PDF

Ignorando o aviso no comentário sobre o uso do imagemagick ...

sudo apt-get install imagemagick

e use isso como um método semelhante ao anterior, mas, neste caso, usando o comando convert from IM:

#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Processing image $i ..."
/usr/bin/convert -thumbnail 100X100 $i $i.png
done

Aqui está um documento elaborado sobre miniaturas usando mensagens instantâneas. Você pode especificar altura, largura e muito mais. Exemplo do link:

For example, this converts JPG images into GIF thumbnails in a "thumbs" sub-directory that was just created 100 pixels wide and 100 pixels high

mkdir thumbs  
mogrify  -format gif -path thumbs -thumbnail 100x100 *.jpg

Oh, o título é específico sobre PDF. Usando o IM ...

convert -thumbnail 100x100 1.pdf 1.png
    
por Rinzwind 15.02.2015 / 21:18