У меня много файлов PDF в папке. Все, что я хочу сделать, это загрузить pdf-файл и сгенерировать из него 100 случайных культур и конвертировать каждую обрезку в изображение размером 256x256. Поэтому, если у меня есть 100 PDF-файлов, у меня будет 100x100 jpg-изображений в качестве вывода, так как я хочу получить 100 культур из 100 PDF-файлов внутри папки. Можно ли автоматизировать этот процесс? PDF-файлы являются научными журнальными работами от CiteSeerX. Я представил образец документа.
Мне также хотелось бы, чтобы случайная культура фокусировалась на местах с текстами, а не на регионах с только белым фоном. Могу ли я применять это, используя некоторые методы?
Вам понадобятся Ghostscript, утилиты Poppler и ImageMagick:
sudo apt install ghostscript poppler-utils imagemagick
Давайте пройдем это шаг за шагом (потому что мне нужно пройти этот психический процесс сам).
pagecount=$(pdfinfo in.pdf | sed -ne 's/^Pages:\s*//p')
page=$(($RANDOM % $pagecount + 1))
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-dFirstPage="$page" -dLastPage="$page" -sOutputFile="in.$page.pdf" -f in.pdf
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [50 50 250 250] /PAGES pdfmark" \
-sOutputFile=out.pdf -f "in.$page.pdf"
Выберите десятичное значение для cropsize (в точках, 1 точка = 1/72 дюйма), что меньше ширины и высоты.
cropsize=50
bbox=$(gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=bbox -f "in.$page.pdf" 2>&1 >&- | sed -ne 's/^%%HiResBoundingBox:\s*//p')
cropbbox=$(python3 - "$cropsize" "$bbox" <<EOF
import sys, random
cropsize = float(sys.argv[1])
llx, lly, urx, ury = map(float, sys.argv[2].split(None, 3))
width = urx - llx
height = ury - lly
if width < cropsize or height < cropsize:
print('Crop size too small for bounds', llx, lly, urx, ury, file=sys.stderr)
sys.exit(1)
cropllx = random.uniform(0, width - cropsize) + llx
croplly = random.uniform(0, height - cropsize) + lly
cropurx = cropllx + cropsize
cropury = croplly + cropsize
print(*map(lambda x: format(x, '.6f'), (cropllx, croplly, cropurx, cropury)))
EOF
)
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [$cropbbox] /PAGES pdfmark" \
-sOutputFile=cropped.pdf -f "in.$page.pdf"
Настройте size, -density (DPI для рендеринга PDF) и -quality (качество сжатия JPEG).
size=256
convert -define pdf:use-cropbox=true -colorspace sRGB -density 600 cropped.pdf \
-flatten -resize "${size}x${size}^" -crop "${size}x${size}+0+0!" -quality 75% cropped.jpg
Результат немного громоздкий для включения строки. Поэтому вам нужно загрузить crop.sh и crop-calc.py точки в тот же каталог.
Использование:
bash /path/to/crop.sh [OPTIONS...] <N> <PDF...>
с:
N - количество случайных областей для извлечения на документ PDF... - любое количество файлов PDF -s|--size PX - размер результирующих изображений в пикселях (по умолчанию 256) -c|--cropsize PT - размер областей документа для обрезание в точках (по умолчанию 50) -d|--density DPI - плотность пикселей при рендеринге документа (по умолчанию 600) 1 -q|--quality Q - качество сжатия полученного изображения, обычно в процентах (по умолчанию 75%) --destext EXT - расширение файла (и формат) полученных изображений (по умолчанию jpg)1 ImageMagick устанавливает жесткий предел 500 миллионов. пикселей, что означает квадратную площадь, значение cropsize ÷ 72 ⋅ density не может превышать √500 млн.
Вам понадобятся Ghostscript, утилиты Poppler и ImageMagick:
sudo apt install ghostscript poppler-utils imagemagick
Давайте пройдем это шаг за шагом (потому что мне нужно пройти этот психический процесс сам).
pagecount=$(pdfinfo in.pdf | sed -ne 's/^Pages:\s*//p')
page=$(($RANDOM % $pagecount + 1))
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-dFirstPage="$page" -dLastPage="$page" -sOutputFile="in.$page.pdf" -f in.pdf
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [50 50 250 250] /PAGES pdfmark" \
-sOutputFile=out.pdf -f "in.$page.pdf"
Выберите десятичное значение для cropsize (в точках, 1 точка = 1/72 дюйма), что меньше ширины и высоты.
cropsize=50
bbox=$(gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=bbox -f "in.$page.pdf" 2>&1 >&- | sed -ne 's/^%%HiResBoundingBox:\s*//p')
cropbbox=$(python3 - "$cropsize" "$bbox" <<EOF
import sys, random
cropsize = float(sys.argv[1])
llx, lly, urx, ury = map(float, sys.argv[2].split(None, 3))
width = urx - llx
height = ury - lly
if width < cropsize or height < cropsize:
print('Crop size too small for bounds', llx, lly, urx, ury, file=sys.stderr)
sys.exit(1)
cropllx = random.uniform(0, width - cropsize) + llx
croplly = random.uniform(0, height - cropsize) + lly
cropurx = cropllx + cropsize
cropury = croplly + cropsize
print(*map(lambda x: format(x, '.6f'), (cropllx, croplly, cropurx, cropury)))
EOF
)
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [$cropbbox] /PAGES pdfmark" \
-sOutputFile=cropped.pdf -f "in.$page.pdf"
Настройте size, -density (DPI для рендеринга PDF) и -quality (качество сжатия JPEG).
size=256
convert -define pdf:use-cropbox=true -colorspace sRGB -density 600 cropped.pdf \
-flatten -resize "${size}x${size}^" -crop "${size}x${size}+0+0!" -quality 75% cropped.jpg
Результат немного громоздкий для включения строки. Поэтому вам нужно загрузить crop.sh и crop-calc.py точки в тот же каталог.
Использование:
bash /path/to/crop.sh [OPTIONS...] <N> <PDF...>
с:
N - количество случайных областей для извлечения на документ PDF... - любое количество файлов PDF -s|--size PX - размер результирующих изображений в пикселях (по умолчанию 256) -c|--cropsize PT - размер областей документа для обрезание в точках (по умолчанию 50) -d|--density DPI - плотность пикселей при рендеринге документа (по умолчанию 600) 1 -q|--quality Q - качество сжатия полученного изображения, обычно в процентах (по умолчанию 75%) --destext EXT - расширение файла (и формат) полученных изображений (по умолчанию jpg)1 ImageMagick устанавливает жесткий предел 500 миллионов. пикселей, что означает квадратную площадь, значение cropsize ÷ 72 ⋅ density не может превышать √500 млн.
Вам понадобятся Ghostscript, утилиты Poppler и ImageMagick:
sudo apt install ghostscript poppler-utils imagemagick
Давайте пройдем это шаг за шагом (потому что мне нужно пройти этот психический процесс сам).
pagecount=$(pdfinfo in.pdf | sed -ne 's/^Pages:\s*//p')
page=$(($RANDOM % $pagecount + 1))
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-dFirstPage="$page" -dLastPage="$page" -sOutputFile="in.$page.pdf" -f in.pdf
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [50 50 250 250] /PAGES pdfmark" \
-sOutputFile=out.pdf -f "in.$page.pdf"
Выберите десятичное значение для cropsize (в точках, 1 точка = 1/72 дюйма), что меньше ширины и высоты.
cropsize=50
bbox=$(gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=bbox -f "in.$page.pdf" 2>&1 >&- | sed -ne 's/^%%HiResBoundingBox:\s*//p')
cropbbox=$(python3 - "$cropsize" "$bbox" <<EOF
import sys, random
cropsize = float(sys.argv[1])
llx, lly, urx, ury = map(float, sys.argv[2].split(None, 3))
width = urx - llx
height = ury - lly
if width < cropsize or height < cropsize:
print('Crop size too small for bounds', llx, lly, urx, ury, file=sys.stderr)
sys.exit(1)
cropllx = random.uniform(0, width - cropsize) + llx
croplly = random.uniform(0, height - cropsize) + lly
cropurx = cropllx + cropsize
cropury = croplly + cropsize
print(*map(lambda x: format(x, '.6f'), (cropllx, croplly, cropurx, cropury)))
EOF
)
gs -q -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite \
-c "[/CropBox [$cropbbox] /PAGES pdfmark" \
-sOutputFile=cropped.pdf -f "in.$page.pdf"
Настройте size, -density (DPI для рендеринга PDF) и -quality (качество сжатия JPEG).
size=256
convert -define pdf:use-cropbox=true -colorspace sRGB -density 600 cropped.pdf \
-flatten -resize "${size}x${size}^" -crop "${size}x${size}+0+0!" -quality 75% cropped.jpg
Результат немного громоздкий для включения строки. Поэтому вам нужно загрузить crop.sh и crop-calc.py точки в тот же каталог.
Использование:
bash /path/to/crop.sh [OPTIONS...] <N> <PDF...>
с:
N - количество случайных областей для извлечения на документ PDF... - любое количество файлов PDF -s|--size PX - размер результирующих изображений в пикселях (по умолчанию 256) -c|--cropsize PT - размер областей документа для обрезание в точках (по умолчанию 50) -d|--density DPI - плотность пикселей при рендеринге документа (по умолчанию 600) 1 -q|--quality Q - качество сжатия полученного изображения, обычно в процентах (по умолчанию 75%) --destext EXT - расширение файла (и формат) полученных изображений (по умолчанию jpg)1 ImageMagick устанавливает жесткий предел 500 миллионов. пикселей, что означает квадратную площадь, значение cropsize ÷ 72 ⋅ density не может превышать √500 млн.