Programowanie w systemie UNIX/ImageMagic

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Pomoc[edytuj]

wersja[edytuj]

ImageMagic ver. 6[edytuj]

 identify -version

lub:

 convert --version

przykładowy wynik

Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib

W części Features brak HDRI, która jest dostępna od wersji 7[1]

Zamiast

  convert 

użyj:

  magick

Linki[edytuj]

Opcje[edytuj]

Sprawdzamy dostepne opcje :

   identify -list list

Przykładowy wynik :

Align
Alpha
Boolean
Cache
Channel
Class
ClipPath
Coder
Color
Colorspace
Command
Compliance
Complex
Compose
Compress
Configure
DataType
Debug
Decoration
Delegate
Direction
Dispose
Distort
Dither
Endian
Evaluate
FillRule
Filter
Font
Format
Function
Gradient
Gravity
Intensity
Intent
Interlace
Interpolate
Kernel
Layers
LineCap
LineJoin
List
Locale
LogEvent
Log
Magic
Method
Metric
Mime
Mode
Morphology
Module
Noise
Orientation
PixelIntensity
Policy
PolicyDomain
PolicyRights
Preview
Primitive
QuantumFormat
Resource
SparseColor
Statistic
Storage
Stretch
Style
Threshold
Type
Units
Validate
VirtualPixel
Weight



colorspace[edytuj]

Sprawdzamy dostępne opcje:

 identify -list colorspace

Przykładowy wynik:

   
CIELab
CMY
CMYK
Gray
HCL
HCLp
HSB
HSI
HSL
HSV
HWB
Lab
LCH
LCHab
LCHuv
LMS
Log
Luv
OHTA
Rec601Luma
Rec601YCbCr
Rec709Luma
Rec709YCbCr
RGB
scRGB
sRGB
Transparent
XYZ
xyY
YCbCr
YDbDr
YCC
YIQ
YPbPr
YUV

endianess[edytuj]

Sprawdzamy dostępne opcje :[2]

  identify -list endian

Wynik :

  LSB
  MSB

limity[edytuj]

  convert -list resource

Przykładowy wynik:

Resource limits:
  Width: 107.374MP
  Height: 107.374MP
  Area: 33.1866GP
  List length: unlimited
  Memory: 15.4537GiB
  Map: 30.9074GiB
  Disk: unlimited
  File: 768
  Thread: 8
  Throttle: 0
  Time: unlimited

Możemy zmieniać :[3]


 convert -limit memory 32 -limit map 64

Użycie[edytuj]

Metody

  • z konsoli
  • poprzez języki programowania

c[edytuj]

Instalacja :

  apt-get install libmagickwand-dev

Przykłady użycia[edytuj]


dla wersji 7[edytuj]

  • magick (for convert)
  • magick identify (for identify)
  • magick mogrify (for mogrify)
  • magick montage (for montage)

Plik : tworzenie[edytuj]

Tworzymy plik[6]

  • pfm ( PF = RGB color image)
  • wielkość 100x100 co daje 120.0 kB
  • endianess
  • kolor : red


 convert -size 100x100 xc:red -endian LSB red_LSB.pfm
 convert -size 100x100 xc:red -endian MSB red_MSB.pfm

Sprawdzmy:

xxd red_LSB.pfm|head
00000000: 5046 0a31 3030 2031 3030 0a2d 312e 300a  PF.100 100.-1.0.
00000010: 0000 803f 0000 0000 0000 0000 0000 803f  ...?...........?
00000020: 0000 0000 0000 0000 0000 803f 0000 0000  ...........?....
00000030: 0000 0000 0000 803f 0000 0000 0000 0000  .......?........
00000040: 0000 803f 0000 0000 0000 0000 0000 803f  ...?...........?
00000050: 0000 0000 0000 0000 0000 803f 0000 0000  ...........?....
00000060: 0000 0000 0000 803f 0000 0000 0000 0000  .......?........
00000070: 0000 803f 0000 0000 0000 0000 0000 803f  ...?...........?
00000080: 0000 0000 0000 0000 0000 803f 0000 0000  ...........?....
00000090: 0000 0000 0000 803f 0000 0000 0000 0000  .......?........


   xxd red_MSB.pfm|head
00000000: 5046 0a31 3030 2031 3030 0a31 2e30 0a3f  PF.100 100.1.0.?
00000010: 8000 0000 0000 0000 0000 003f 8000 0000  ...........?....
00000020: 0000 0000 0000 003f 8000 0000 0000 0000  .......?........
00000030: 0000 003f 8000 0000 0000 0000 0000 003f  ...?...........?
00000040: 8000 0000 0000 0000 0000 003f 8000 0000  ...........?....
00000050: 0000 0000 0000 003f 8000 0000 0000 0000  .......?........
00000060: 0000 003f 8000 0000 0000 0000 0000 003f  ...?...........?
00000070: 8000 0000 0000 0000 0000 003f 8000 0000  ...........?....
00000080: 0000 0000 0000 003f 8000 0000 0000 0000  .......?........
00000090: 0000 003f 8000 0000 0000 0000 0000 003f  ...?...........?


Tworzymy plik pfm w skali szarości ( Pf) :

 convert -size 100x100 xc:Gray -colorspace Gray  gray.pfm

sprawdzamy:

   xxd gray.pfm|head

Wynik :

00000000: 5066 0a31 3030 2031 3030 0a2d 312e 300a  Pf.100 100.-1.0.
00000010: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000020: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000030: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000040: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000050: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000060: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000070: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000080: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>
00000090: fdfc fc3e fdfc fc3e fdfc fc3e fdfc fc3e  ...>...>...>...>

Wielkośc pliku:

  wc -c red_MSB.pfm

lub

  ls -l *

Wyniki:

  • red_LSB.pfm = 120016 B = 120.0 kB
  • red_MSB.pfm = 120015 B = 120.0 kB ( o jeden mniej bajt niż LSB, znak minus)
  • gray.pfm = 40016 B = 40.0 kB ( czyli 3 razy mniejszy od pliku RGB, pomijając nagłówek red_LSB.pfm czyli 16 B )

Plik: sprowdzanie[edytuj]

 identify -verbose red_MSB.pfm

Przykładowy wynik:

Image: red_MSB.pfm
  Format: PFM (Portable float format)
  Class: DirectClass
  Geometry: 100x100+0+0
  Units: Undefined
  Type: Palette
  Base type: TrueColor
  Endianess: MSB
  Colorspace: sRGB
  Depth: 32/1-bit
  Channel depth:
    red: 1-bit
    green: 1-bit
    blue: 1-bit
  Channel statistics:
    Pixels: 10000
    Red:
      min: 65535 (1)
      max: 65535 (1)
      mean: 65535 (1)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
      entropy: -nan
    Green:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
      entropy: -nan
    Blue:
      min: 0 (0)
      max: 0 (0)
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
      entropy: -nan
  Image statistics:
    Overall:
      min: 0 (0)
      max: 65535 (1)
      mean: 21845 (0.333333)
      standard deviation: 0 (0)
      kurtosis: 0
      skewness: 0
      entropy: -nan
  Colors: 1
  Histogram:
     10000: (4294967295,         0,         0) #FFFFFFFF0000000000000000 red
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: white
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 100x100+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Undefined
  Orientation: Undefined
  Properties:
    date:create: 2019-12-01T09:28:02+01:00
    date:modify: 2019-12-01T09:28:02+01:00
    signature: f3c3843113c9eab20f5826f19024dcbc4e4f5532b94d47bb5d5b80ed30d380f6
  Artifacts:
    filename: red_MSB.pfm
    verbose: true
  Tainted: False
  Filesize: 120KB
  Number pixels: 10K
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org

Plik: wyświetlanie[edytuj]

 display red_LSB.pfm

gradient koloru[edytuj]

  • dane w pliku pgm
  • gradient w postaci CLUT jako plik clut.ppm

Przykłady:[7]

gradient dyskretny:

  convert input.pgm -level 0,65532 clut.ppm -interpolate integer -clut -depth 8 output.png

gradient ciągły

    convert input.pgm -level 0,65532 clut.ppm  -clut -depth 8 output.png



paleta[edytuj]

Paleta z obrazu ( w trybie indeksowanym)[8]

 convert m.png -unique-colors -colors 256 -format %c -depth 8  histogram:info:->palette2.txt

gamma[edytuj]

składnia:[9]

 -gamma value

przykład uzycia

 convert input.png -gamma .45455 output.png

Wartości:

  • zwykle pomiędzy 0.8 do 2.3
  • mniejsze niż 1.0 ściemniają
  • większe niż 1.0 rozjaśniają

Zobacz również:

Szum[edytuj]

Lista dostępnych typów szumu ( ang. noise)

 convert -list noise

Typu

  • Gaussian
  • Impulse
  • Laplacian
  • Multiplicative
  • Poisson
  • Random
  • Uniform = no noise = solid gray


Utworzymy plik :

 convert -size 1000x1000 xc:Gray -colorspace Gray +noise Uniform uniform.pgm

Opecje:


 convert -size 300x200 xc:gray -attenuate 0.5 +noise random out.bmp
 convert -size 600x400 xc:gray +noise random -colorspace gray -threshold 50% noise.png

histogram[edytuj]

Histogram w postaci:[14]

  • pliku z wykresem
  • pliku tekstowego
  convert gauss.pgm -colorspace Gray -define histogram:unique-colors=false histogram:g.png

Kod[edytuj]

  • Quantum - wewnętrzną reprezentacją piksela w ImageMagick
  • QuantumDepth
  • Quantum Typedef
  • QuantumRange:
  "Internally, IM scales pixel values from the quantumrange of the 16-bit per channel images (range 0 to 65535 integers) or 8-bit per channel images (range 0 to 255 integers) to the range 0 to 1 (floats). But when processing is done, it converts back to integers of the quantumrange before writing out the image."[15]

Problemy[edytuj]

convert-im6.q16hdri: cache resources exhausted[edytuj]

Przy konwersji duzego pliku pojawia się komunikat:

 convert-im6.q16hdri: cache resources exhausted 

Rozwiązanie: zmiana limitów:


Sprawdzamy limity:[17]

 identify -list policy

Zmieniamy doraźnie:[18]

  convert -limit memory 100mb -limit disk 1gb -resize 100x100 p.png p2.png


Zmieniamy limity na stałe w pliku policy.xml:

 sudo gedit /etc/ImageMagick-6/policy.xml

z :

 <policy domain="resource" name="disk" value="1GiB">

na

 <policy domain="resource" name="disk" value="10GiB"/>

Źródła[edytuj]

  1. imagemagick high-dynamic-range
  2. imagemagick : endian
  3. Image Magick : limit
  4. commons:Category:Created_with_ImageMagick
  5. commons:Category:Images_with_Image_Magic_source_code
  6. stackoverflow question : does-anyone-know-how-to-convert-to-little-endian-pfm-file-from-imagemagic
  7. Paul Tol's Notes
  8. imagemagick : identify
  9. image magick : gamma
  10. autogamma -Fred's ImageMagick Scripts
  11. h vidtfeldts : gamma-correction
  12. stackoverflow question: generate-random-bmp-in-cli
  13. stackoverflow question: generate-image-of-certain-resolution-containing-black-and-white-noise
  14. imagemagick : histogram
  15. imagemagick.org: dyskusja
  16. ImageMagick cache resources exhausted resolved by Grant
  17. imagemagick: architecture, tera-pixel
  18. imagemagick: Cache resources exhausted