#!/usr/bin/ruby -w # Encoding: UTF-8 # frozen_string_literal: true # =========================================================================== # # localhost/DATA/PROGRAMMING_LANGUAGES/RUBY/src/image_paradise/lib/image_paradise/www/imagemagick/imagemagick.cgi # =========================================================================== # require ‘cyberweb/autoinclude’

german { css_style :template1 favicon ‘PC/IMAGEMAGICK/IMAGEMAGICK_FAVICON.jpg’ body_css_class ‘s12px padt4px marpad2px VERDANAs’ body_css_style ‘background-color: d3d2d1;’ font_size ‘default’

YDOT = sg(:yel_dot,‘marr4px bblack1’) div(‘mart0px’) {

# ========================================================================= #
# CONVERT TAG - ist bei Imagemagick dabei
# ========================================================================= #
div('FS1_1em pad1em mar2px bblack1','imagemagick','min-height:40em'){
  CONVERT_CSS = 'BG_Black1 FW6 mars8px mediumseagreen s2px'
  h1 'ImageMagick / RImageMagick','GOTHIC martb1px s0_5em midnightblue FI','convert'
  h1 'Convert','FI firebrick FL120 marb0px mart1px wid92 s1em','CONVERT'
  br
  PARAGRAPH_BG_COLOUR+'border-left:2px solid darkblue;border-top:2px solid darkblue'
  e 'ist das wichtigste KonsolenTool bezüglich Grafik und 
  Linux schlechthin.
  (<i> Aus Lizengründen konvertierte es früher "normalerweise" nicht
  nach .gif; mittlerweile hat ImageMagick jedoch kein Problem mehr
  mit .gif Dateien </i>)'
  br
  abr 'https://www.imagemagick.org/script/convert.php',
      content: 'Die API Dokumentation zu convert findet man hier.',
      css_class: 'BO mars2em slateblue'
  br
  e 'Für Optionen wie <b>-fill</b> kann man RGB angeben wie
  zum Beispiel <b>rgb(255,255,255)</b>.'
  br
  e 'Um zu sehen, was convert kann, muss man es ausprobieren.';br
  e 'Die <b>allgemeine Syntax</b> ist:'
  br
  e '  convert [ options ... ] input_file output_file ','s1em'
  br
  e 'Um eine jpg Datei in eine png Datei umzuwandeln nutzt man
  diese Syntax hier:'
  br
  e '  convert DnD.jpg DnD.png',CONVERT_CSS
  br
  e 'Convert kann auch mehrere Bilder in <b>pdf</b> verwandeln
  zum Beispiel:'
  br
  e '  convert '+INPUT_IMG+' y.jpg bla.pdf',CONVERT_CSS
  e '  convert *.jpg /Depot/PDF/bla.pdf',CONVERT_CSS
  e '  convert *.png /Depot/PDF/bla.pdf',CONVERT_CSS
  br
  e 'Folgende Anweisung verändert die Datei '+INPUT_IMG+' zu der
  kleineren .png Datei '+OUTPUT_IMG+' (width:100px, height: 75px):'
  br
  e '  convert '+INPUT_IMG+' -scale geometry 75 '+OUTPUT_IMG,
    'FW6 s1em','',COL_1
  br
  e 'Generell legt man die Grösse eines Bildes mittels -size w x height fest, 
  zb -size 300x50'
  br
  e 'Bilder "addieren" kann man mittels <b>average</b>'
  e '  convert -average '+INPUT_IMG+' test.gif','FW6 s1em','',COL_1
  e 'und folgendes'
  e '  convert -charcoal 3 '+INPUT_IMG+' '+OUTPUT_IMG,'FW6 s1em','',COL_1
  e 'Führt einen <b>Kreide Effekt</b> ein.'
  br 
  e 'Das Bild verliert fast alle Farben, und schaut wie eine Zeichnung
  aus - siehe das Bild zur rechten Seite, wobei der Effekt generell 
  ziemlich stark ist.'
  img 'DESIGNING/CHARCOAL.jpg','FLR bblack2 marb4px mars1em',
      'drag_CharcoalMod'
  br
  e 'Je höher der Wert bei charcoal ist, um so mehr charcoal 
  (<b>Holzkohle</b>) wird verwendet, das Bild wird also immer dünkler.'
  br
  e 'Noch ein charcoal Beispiel, dieses Mal ein reales Bild von einigen 
  Pflanzen, die ausserhalb meiner Wohnung wachsen.'
  br
  img 'HOME/28_APR_05_RegnetSonnenschein_charcoaled.jpg',
      'FLR bblack2 marb4px marr1em','drag_charcoal'
  # ==================================================================== #
  # ROT GRÜN BLAU
  # ==================================================================== #
  div('CR TAJ VAR wid85 mars2px bblack2 mart2em pad4px s8px',
      'background-color:#ffcb63'){
    e 'Um Werte für '
    s 'b','Rot ','Red bold'
    s 'b','Grün ','DGreen'
    e 'und '
    s 'b','Blau ','Blue'
    ebr ' festzulegen:'
    e '10/20/30 heisst Rot = 10, Green = 20 Blau = 30. Erlaubt sind
    auch Prozentangaben (10%).'
  }
  br
  e 'Eine weitere nützliche Funktion von convert ist 
  die option <b>-colorize</b>. Dabei wird die Farbe jedes Pixel 
  mit einer angegeben Farbe vermischt.'
  e '  convert -colorize 255 input.jpg output.jpg',CONVERT_CSS
  br
  e 'Erneut ein Beispiel mit colorize, aber dieses mal 
  nutzen wir die R,G,B Angabe:'
  e '  convert -colorize 2,15,75 '+IMG1+' output.jpg',CONVERT_CSS
  br
  e 'Mittels der <b>Implode</b> Option scheint das Zentrum des
  Bildes in ein schwarzes Loch gesaugt zu werden. Je höher, umso
  grösser ist der Effekt, wobei meiner Meinung nach ein Wert
  grösser 1 zu schlechten Ergebnissen führt: '
  e '  convert -implode 1 '+INPUT_IMG+' '+OUTPUT_IMG,CONVERT_CSS
  e 'Folgendes Bild zeigt das Zentrum einer Implosion, man 
  kann sehen, das alle Farblinien zu diesem Zentrum hinströmen.'
  img 'PC/IMAGEMAGICK/IMPLODE.png','bblack1 marb3px marr1em'; br
  e '<b>solarizing</b> findet statt, wenn ein <b>Bild-Negativ</b> 
  dem Licht während der Entwicklungsphase ausgesetzt ist. 
  (Jaja, alte Zeiten, heute funzt das mit Digitalkameras).
  Das Eingabe Argument zeigt die Intensität an. Über diesen 
  Wert hinaus wird Solarize angewandt, entweder
  absolut wert oder in Prozenten angegeben.';br
  e 'Um ein <b>animiertes Bild</b> zu machen, kann man dies hier nutzen:'
  e '  convert -loop 0 -delay 410 '+INPUT_IMG1+' '+INPUT_IMG2+' /Depot/X.gif',CONVERT_CSS
  e '  convert -solarize 88 '+INPUT_IMG+' X.png',CONVERT_CSS
  br
  e 'Bilder verknüpfen geht zb so:'
  convert_css '  convert +adjoin a.jpg b.jpg ab.jpg'
  e '<b>spread</b> bewegt Pixel im Bild <b>zufällig</b>. 
  Das Argument ist der Radius UM ein Pixel, das verändert werden 
  soll, von dem ausgehend der nächste "Spread" erfolgt. 
  Mit anderen Worten, das Argument legt fest, wie sehr das Zielbild dem 
  Ursprungsbild ähnelt. 
  Gibt man zb 10 an, dann sind um Pixel X genau 10  Pixel so wie im 
  Originalbild, bevor erneut ein Pixel X ausgetauscht wird.'
  # spread
  convert_css '  convert -spread 44 '+INPUT_IMG+' X.png'
  e 'Meiner Meinung nach ist spread eher unnütz.'
  ebr 'Diese Optionen kann man übrigens zu einer Kette verknüpfen: '
  convert_css '  convert -sample 25%x25% -spread 4 -charcoal 4 '+INPUT_IMG+' '+OUTPUT_IMG
  anmerkung 'Zur Option -sample siehe diese Webseite:'
  br
  abr 'http://www.imagemagick.org/Usage/resize/#sample',
      content: 'DEF'
  ebr 'Um <b>thumbnails</b> zu erstellen, bzw die <b>Grösse zu ändern</b>, funktioniert 
  folgendes (das ist auch als cropping bekannt):'
  br
  convert_css '  convert -size 120x120 '+INPUT_IMG+" -resize 120x120   +profile '*' thumbnail.jpg "
  convert_css '  convert '+INPUT_IMG+" -resize 50% '*' thumbnail.jpg "
  convert_css '  convert SELINA_PERES.jpg -sample 25%x25%  foo.jpg'
  e 'Soweit mir bekannt kann man -size weglassen, und einfach 
  nur -resize verwenden.  
  Dann verkürzt sich das ganze zu:'
  convert_css "  convert -resize 75x75 "+INPUT_IMG+' '+OUTPUT_IMG
  e 'Per default hält sich convert an die Image Grösse,
  mittels ! kann man dies overrulen und explizit bestimmen, das ein 
  Image auf ein bestimmte Grösse resized werden soll:'
  convert_css "  convert -resize 75x75! "+INPUT_IMG+" "+OUTPUT_IMG
  e 'Mittels folgendem Ruby script wandelt man alle 
  Bilddateien um'
  convert_css 'x.each {|tmp| system("convert -resize 115x115! " + tmp +" "+ "OFF_"+tmp )}'
  br
  ebr 'Etwas <b>eleganter</b> geht das <b>Resizen</b> auch über 
  Prozentangaben (zumindest eleganter für Thumbnails):'
  convert_css '  convert -sample 25%x25% '+INPUT_IMG+' out.jpg'
  ebr 'Und um alle images im aktuellen Directory zu thumbnailen: '
  convert_css 'for img in `ls *.jpg`'
  convert_css '  do '
  convert_css 'convert -sample 25%x25% IMG thumb-IMG'
  convert_css 'done'
  ebr 'Man kann die Bilder auch rotieren lassen wie zB: '
  convert_css '  convert -rotate 90 input.jpg output.jpg'
  e 'Mittels <b>-pointsize</b> kann man die Grösse des 
  Pinsels bestimmen.'
  ebr 'Oben hast du das convert command kennengelernt.'
  ebr 'Ein weiteres sehr wichtiges command ist identify, mittels dessen Hilfe
  man Grafik Dateien analysieren kann: '
  convert_css 'identify foo.bmp'
  e 'Wie finde ich schnell heraus, wie gross eine .jpg Datei ist? 
  Genau wie oben auch. (img size, image size)'
  br
  convert_css 'identify '+INPUT_IMG
  br
  ebr 'convert führt umfangreiche Konversionen durch, Format, Grösse, 
  Auflösung, animierte GIFs, frames, und anderes. Wichtig ist delay:'
  e 'delay 1x/100ths einer Sekunde, zeigt das nächste Image nach 
  einer Pause an. Delay 100 ist somit genau 1 Sekunde.
  Hier ein Beispiel:'
  convert_css 'convert -delay 100 '+INPUT_IMG+' y.png z.gif  
  <span class="Gold"># -> To gif</span>'
  e 'Sehr nett ist die Option, bestimmte Teile eines Bildes 
  transparent zu machen:'
  convert_css 'convert -transparent white '+INPUT_IMG+' '+OIMG
  s2 '* composite:',CONVERT_CSS
  e 'damit können wir den Blend Modus einstellen
  (Plus, Minus, Over, Add, Subtract, Multiply ). '
  e '* display: displays the images individually or as thumbnails. '
  s2 "display 'vid:*.png' ",CONVERT_CSS
  ebr '# generate thumbnails of all PNG images'
  s2 '* identify:',CONVERT_CSS
  e 'displays information of format, size, etc. and the number of seconds 
  it took to read and process the image. Sehr nützlich. '
  e 'import: screen capture, that way we can show the final result to 
  our readers :)'
  ebr 'Nun ein Beispiel mit composite, um dem Originalbild ein neues Bild
  hinzuzufügen. '
  e 'composite -gravity center -compose Copy new_fog.png canvas.png 
  comp_new_fog.png',CONVERT_CSS
  e 'Was wirklich geil ist, ist die Möglichkeit, das man Bilder  
  erstellt mit Schriften drauf, ohne je Gimp starten zu müssen.'
  e 'Da ich immer Probleme mit passender Schrift hatte, hier eine 
  Liste mit funzenden Fonts:'
  e 'Bookman-DemiItalic, Courier, LucidaTypewriter,  ' 
  e 'Hier ein paar Beispiele:'
  convert_css "convert -size 320x85 xc:transparent -font Bookman-DemiItalic 
  -pointsize 72 -draw \"text 25,60 'Magick'\" -channel RGBA -gaussian 
  0x6 -fill darkred -stroke magenta  -draw \"text 20,55 'Magick'\" 
  /Depot/bla.png"
  convert_css "convert -size 300x85 xc:transparent -font Nimbus-Roman
  -pointsize 88 -draw \"text 25,60 'Sarlem'\" -channel RGBA -gaussian 
  0x6 -fill \"rgb(25,53,145)\"  -stroke \"rgb(25,33,45)\"  -draw \"text 20,55 'Sarlem'\" 
  /Depot/bla.png"
  e "convert -size 340x165 xc:transparent -font Bookman-DemiItalic 
  -pointsize 32 -draw \"text 18,20 'Goldene Tafel'\" -channel RGBA -gaussian 
  0x5 -fill \"rgb(254,153,1)\"  -stroke \"rgb(55,33,45)\"  
  -draw \"text 12,25 'Goldene Tafel'\" /Depot/bla.png",CONVERT_CSS
  e 'Grafiken kann man auch verkleinern.'
  e 'Das ist hilfreich um zb einen kleinen Abschnitt auszuwählen.'
  e 'Die Option Crop ermöglicht dies. Beispiel:'
  convert_css '  convert rose: -crop 40x30+90+60 SARLEMKARTE.jpg'
  div {
    h2 'RMagick'
    p {
      e 'Die Ruby Implementation zu ImageMagick heisst RMagick.'
      s2 'Die wird an anderer Stelle erläutert und zwar '
      a 'rmagick', content: 'hier', css_class: 'BO'
    }
    div('s1em'){
      abr 'http://raa.ruby-lang.org/project/rmagick/',
           content: YDOT+'RMagick',
           css_class: 'darkblue BO mars1em'
      abr 'http://www.cit.gu.edu.au/~anthony/graphics/imagick6/crop/',
           content: YDOT+'Crop Aktion',
           css_class: 'darkblue BO mars1em'
    }
  }
}
div {
  h2 'jp2a'
  e 'Erstellt aus .jpg Dateien, ASCII. Hier einige Beispiele, zb
  auf der Konsole ausprobieren:'
  br
  cmd 'convert http://www.google.com/intl/en/images/logo.gif jpg:- | jp2a -'
  cmd 'convert http://tit4n.free.fr/images/boogibabes/bb_04_002.jpg jpg:- | jp2a -'
  cmd 'convert RPG/ADOPTION/HORSE.png jpg:- | jp2a --width=76 -'
  cmd 'convert RPG/ADOPTION/HORSE.png jpg:- | jp2a -'
} 
div {
  h2 'ImageMagick Links'
  p('s1em') {
    abr 'https://www.imagemagick.org/Usage/color_mods/',
        content: :self
  }
}

}}