สร้างรูปขนาดย่อสำหรับข้อความหรือไม่


10

ฉันต้องการสร้างรูปย่อสำหรับไฟล์ข้อความบางไฟล์ เห็นได้ชัดว่าระบบมีความสามารถในการทำสิ่งนี้อย่างแน่นอน (ดูภาพหน้าจอ) มีวิธีใดบ้างที่ฉันสามารถเข้าถึงภาพเหล่านี้และเพียงแค่คัดลอกเพื่อใช้ในภายหลัง

หรือมีคำสั่งพิเศษ (เครื่องมือ) สำหรับสิ่งนี้หรือไม่?

somefolder.png

ฉันดูที่นี้: รูปขนาดย่อบรรทัดคำสั่ง

และสิ่งนี้: ฉันจะสั่งให้ Nautilus สร้างภาพขนาดย่อไว้ล่วงหน้าได้อย่างไร

ซึ่งมีประโยชน์ แต่ไม่มีใครสามารถจัดการกับข้อความ


@Rmano ไอคอนจะต้องมีขนาดเท่าไหร่
Jacob Vlijm

@JacobVlijm แนวคิดคือการสร้างรูปขนาดย่อ --- รูปแบบพื้นฐานscript -s width input_url output_fileคือรูปแบบที่ใช้โดย nautilus ดูตัวอย่างrlog.rgtti.com/2011/11/24/ …และหน้าที่เชื่อมโยง ...
Rmano

คำตอบ:


5

ใช้ Imagemagick เพื่อสร้างไอคอนข้อความ

ตามหลักการเดียวกันกับที่นี่สคริปต์ด้านล่างสร้างไอคอนข้อความจากไฟล์ข้อความด้วยความช่วยเหลือของ Imagemagick

สีของภาพพื้นหลังโค้งมนและสีข้อความสามารถตั้งค่าในส่วนหัวของสคริปต์ (เช่นเดียวกับคุณสมบัติอื่น ๆ )

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่มันไม่
มันอ่าน textfile ใช้เวลาวันแรกสี่สาย (ชุดn_lines = 4) เจ็ดตัวอักษรแรก (ชุดn_chars = 10) psize = "100x100"ของแต่ละบรรทัดและสร้างภาพซ้อนทับบนภาพของขนาดที่ตั้งอยู่ในเช่น

วิธีใช้

สคริปต์imagemagickจะต้องติดตั้ง:

sudo apt-get install imagemagick

แล้ว:

  1. คัดลอกสคริปต์ลงในไฟล์เปล่า
  2. บันทึกเป็น create_texticon.py
  3. ตั้งอยู่ในส่วนหัว:

    • สีของพื้นหลังของไอคอน
    • สีของไอคอนข้อความ
    • ขนาดของไอคอนที่สร้างขึ้น
    • จำนวนบรรทัดที่จะแสดงในไอคอน
    • จำนวน (แรก) อักขระต่อบรรทัดที่จะแสดงในไอคอน
    • เส้นทางที่จะบันทึกภาพ
  4. รันด้วย textfile ของคุณเป็นอาร์กิวเมนต์:

    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

วิธีนี้คงอยู่ใช่ไหม?
αғsнιη

คุณหมายถึงอะไรโดยถาวร สคริปต์สร้างไอคอนหรือฉันเข้าใจผิดคำถามหรือไม่
Jacob Vlijm

1
@Kasiya หากต้องการใช้เป็นภาพขนาดเล็กให้ดูrlog.rgtti.com/2011/11/24/…และrlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus จะอัปเดต อัตโนมัติ ความคิดดี; ตอนนี้แค่คิดเกี่ยวกับการใช้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


1
อืม ... ไฟล์ข้อความไม่ใช่ไฟล์ตัวประมวลผล มีความเข้าใจผิดขั้นพื้นฐานค่อนข้างนี่ ไฟล์ข้อความเป็นแหล่งโปรแกรมบันทึกเพียง ".txt" fles เป็นต้นเอกสาร Office และ PDF มีรูปขนาดย่อที่ใช้ได้
Rmano

@Rmano: การใช้ PDF เป็นเทคนิคที่มักใช้โดยซอฟต์แวร์ ECM เมื่อสร้างตัวอย่างแม้กระทั่งรูปแบบที่ไม่มีใครแปลงเป็น PDF เช่นไฟล์บันทึก ดังนั้นนี่เป็นความคิดที่ดี
Nicolas Raoul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.