Как вручную создать эскиз для одного файла, используя другой файл

Я много рисую с помощью Clip Studio Paint, которая почти безупречно работает с вином, но единственное серьезное предостережение в том, что исходные файлы имеют формат, не поддерживающий миниатюры в linux (насколько я могу судить) .

Для большинства файлов у меня будет 2 версии. File.clip (формат CSP) и File.png. Я хотел бы использовать .png (или его эскиз) в качестве эскиза для File.clip.

Итак, как бы вы добавили миниатюру в случайный файл из командной строки?

Я работаю в Ubuntu 18.04 и Nautilus.

Редактировать: Изменено описание того, что я хочу сделать, чтобы сделать его более понятным.

1
задан 12 April 2019 в 19:50

1 ответ

Хорошо, так насколько я понимаю, Вы стремитесь создать миниатюру файла при помощи другого файла (созданный очевидно).

Мы можем попробовать что-то вроде этого:

#!/bin/bash

# Based on CC-BY 2016 Marcin Kaminski https://askubuntu.com/users/98096/marcin-kaminski
# https://askubuntu.com/a/201894/216568

# USAGE: mkthumb.sh [-s] [-r] <path> [path]
# create nautilus thumbnails for clips in the directories (and their
# sub-directories) given as parameters.
# -s is used to skip generating thumbnails that already exist

skip_existing=0
if [[ "${1}" == "-s" ]]; then
    skip_existing=1
    shift
fi

maxdepth="1"
if [[ "${1}" == "-r" ]]; then
    maxdepth="9999"
    shift
fi

mkImageThumb() {
    size="${3}"
    file="${1}"
    dest="${2}"
    convert -thumbnail ${size}x${size} "${file}[0]" "${dest}" &>/dev/null
    if (( $? == 0 )); then
        echo "OK   ${file} [${dest}]"
    else
        echo "FAIL ${file}"
    fi
}

OLDIFS="${IFS}"
IFS=$'\n'
for dir in $@; do
    realdir=`realpath "${dir}"`
    echo "Processing directory ${realdir}"
    for file in $(find "${realdir}" -maxdepth ${maxdepth} -regextype posix-egrep -iregex '.*\.clip'); do
        md5=$(echo -n "${file}" | perl -MURI::file -MDigest::MD5=md5_hex -ne 'print md5_hex(URI::file->new($_));')
        image=$(dirname "${file}")/$(basename "${file}" .clip).png
        dest="${HOME}/.cache/thumbnails/normal/${md5}.png"
        if [[ ! -f "${dest}" || "${skip_existing}" != "0" ]]; then
            mkImageThumb "${image}" "${dest}" 128
        else
            echo "SKIP ${file}"
        fi
        dest="${HOME}/.cache/thumbnails/large/${md5}.png"
        if [[ ! -f "${dest}" || "${skip_existing}" != "0" ]]; then
                mkImageThumb "${image}" "${dest}" 256
        else
            echo "SKIP ${file}"
        fi
    done
done
IFS="${OLDIFS}"

Этот сценарий возьмет целый каталог и генерирует необходимые миниатюры (я не протестировал сценарий теперь, но он должен).

1
ответ дан 12 April 2019 в 19:50

Другие вопросы по тегам:

Похожие вопросы: