Regina Schaukrug: Linux, Scanner - Ausgaben von scanimage -A benötigt

Ich schreibe gerade ein PHP-Skript, welches zum Scannen dienen soll. Statt irgendwelche fixen Werte (Scanner, Scanbereich, Modus, Feed) vorzugeben will ich diese auslesen und in einem Formular anbieten. Dazu dient

scanimage -A

Jetzt hab ich natürlich nicht gerade eine große Scannersammlung... und brauche deshalb als Examples eben diese Ausgaben.

Einfach zu parsen sind diese übrigens nicht...

akzeptierte Antworten

  1. Was schon läuft:

    <?php
    
    class AllScanners {
    	
    	public $arScanners = false;
    
    	function __construct() {
    		if ( false === $this ->  arScanners ) {
    			$this -> detectScanners();
    	  }
    	}
    	
    	function detectScanners()  {
    		
    		#$returns = `scanimage -A;`;
    
        ##### Für die Test (so gehts schneller) ###
    		$returns = "
    All options specific to device `BrotherADS2200:libusb:001:007':
        -l 0..165.1mm [0]
            Top-left x position of scan area.
        -t 0..304.8mm [0]
            Top-left y position of scan area.
        -x 50.8..215.9mm [215.9]
            Width of scan-area.
        -y 50.8..355.6mm [355.6]
            Height of scan-area.
        --resolution 100|150|200|300|400|600dpi [200]
            Sets the resolution of the scanned image.
        --mode Black & White|Gray|24 bit Color [Black & White]
            Selects the scan mode (e.g., lineart, monochrome, or color).
        --source Automatic Document Feeder(left aligned)|Automatic Document Feeder(left aligned,Duplex) [Automatic Document Feeder(left aligned)]
            Selects the scan source (such as a document-feeder).		
    ";		
    		
    		$lines = explode ( "\n", $returns );
    		$scannerID = -1;
    		foreach ( $lines as $line ) {
    			$line = trim ( $line );
    			if ( "" !== $line ) {
    				#echo $line . "\n";
    				if ( 0 === strpos( $line, "All options specific to device"  ) ) {
    					$scannerID ++;
    					$beginName = strpos( $line, '`' ) + 1 ;
    					$endName   = strpos( $line, ':' ) - $beginName;					    
    					$arScanners[$scannerID] = array();
    					$arScanners[$scannerID]['ScannerName'] = substr ( $line, $beginName, $endName );
    					$optionCounter = -1;
    						
    				} elseif ( 0 === strpos( $line, '-') ) {
    					$optionCounter ++;
    					list( $option, $rest ) = explode ( ' ', $line, 2 );
    					$optionName = str_replace('-', '', $option ) ;					
    					$arScanners[$scannerID]['options'][$optionCounter]['option'] = $option;
    					$arScanners[$scannerID]['options'][$optionCounter]['optionName'] = $optionName;
    
    				} else {
    					if (  strpos ( $rest, '..' ) ) {
    						$arScanners[$scannerID]['options'][$optionCounter]['Type'] = 'FromTo';
    						list( $values, $rest2 ) = explode ( ' ', $rest );
    						List ($strMin, $strMax ) = explode ('..', $values );
    						$arScanners[$scannerID]['options'][$optionCounter]['minValue'] = (float)$strMin;
    						$arScanners[$scannerID]['options'][$optionCounter]['maxValue'] = (float)$strMax;
    						$arScanners[$scannerID]['options'][$optionCounter]['Unit'] = str_replace( (string)(float)$strMax, '', $strMax );
    						$arScanners[$scannerID]['options'][$optionCounter]['defaultValue'] = substr( $rest2, 1, -1 );
    					} elseif ( strpos ( $rest, '|' ) ) {
    						$arScanners[$scannerID]['options'][$optionCounter]['Type'] = 'OneOf';
    						list( $values, $rest2 ) = explode ( '[', $rest );						
    						$values = explode( '|', trim( $values ) );
    						
    						$arScanners[$scannerID]['options'][$optionCounter]['defaultValue'] = substr( $rest2, 0, -1 );
    						$strLastValue = array_pop( $values );
    						
    						$floatLastValue  = (float)$strLastValue;
    						if ( $floatLastValue and false === strpos($strLastValue, ' ' ) ) { 
    							$values[] = $floatLastValue;
    							$arScanners[$scannerID]['options'][$optionCounter]['Unit'] = str_replace( (string)$floatLastValue , '', $strLastValue );
    						} else {
    							$values[] = $strLastValue;
    						}
    						
    						
    						$arScanners[$scannerID]['options'][$optionCounter]['values'] = $values;
    						
    				    } 
    				    
    					$arScanners[$scannerID]['options'][$optionCounter]['Description'] = $line;
    				}
    			}
    		}
    		$this -> arScanners = $arScanners;
    	}
    
        function showScanners () {
    		    print '<pre>';
    			print_r( $this -> arScanners );
    	}	
    	
    }
    
    ####### Test: ###############
    $scanner = new AllScanners();
    $scanner->showScanners();
    
    

    Ausgaben:

    Array
    (
        [0] => Array
            (
                [ScannerName] => BrotherADS2200
                [options] => Array
                    (
                        [0] => Array
                            (
                                [option] => -l
                                [optionName] => l
                                [Type] => FromTo
                                [minValue] => 0
                                [maxValue] => 165.1
                                [Unit] => mm
                                [defaultValue] => 0
                                [Description] => Top-left x position of scan area.
                            )
    
                        [1] => Array
                            (
                                [option] => -t
                                [optionName] => t
                                [Type] => FromTo
                                [minValue] => 0
                                [maxValue] => 304.8
                                [Unit] => mm
                                [defaultValue] => 0
                                [Description] => Top-left y position of scan area.
                            )
    
                        [2] => Array
                            (
                                [option] => -x
                                [optionName] => x
                                [Type] => FromTo
                                [minValue] => 50.8
                                [maxValue] => 215.9
                                [Unit] => mm
                                [defaultValue] => 215.9
                                [Description] => Width of scan-area.
                            )
    
                        [3] => Array
                            (
                                [option] => -y
                                [optionName] => y
                                [Type] => FromTo
                                [minValue] => 50.8
                                [maxValue] => 355.6
                                [Unit] => mm
                                [defaultValue] => 355.6
                                [Description] => Height of scan-area.
                            )
    
                        [4] => Array
                            (
                                [option] => --resolution
                                [optionName] => resolution
                                [Type] => OneOf
                                [defaultValue] => 200
                                [Unit] => dpi
                                [values] => Array
                                    (
                                        [0] => 100
                                        [1] => 150
                                        [2] => 200
                                        [3] => 300
                                        [4] => 400
                                        [5] => 600
                                    )
    
                                [Description] => Sets the resolution of the scanned image.
                            )
    
                        [5] => Array
                            (
                                [option] => --mode
                                [optionName] => mode
                                [Type] => OneOf
                                [defaultValue] => Black & White
                                [values] => Array
                                    (
                                        [0] => Black & White
                                        [1] => Gray
                                        [2] => 24 bit Color
                                    )
    
                                [Description] => Selects the scan mode (e.g., lineart, monochrome, or color).
                            )
    
                        [6] => Array
                            (
                                [option] => --source
                                [optionName] => source
                                [Type] => OneOf
                                [defaultValue] => Automatic Document Feeder(left aligned)
                                [values] => Array
                                    (
                                        [0] => Automatic Document Feeder(left aligned)
                                        [1] => Automatic Document Feeder(left aligned,Duplex)
                                    )
    
                                [Description] => Selects the scan source (such as a document-feeder).
                            )
    
                    )
    
            )
    
    )
    

    Wie ich das Linux dazu bekomme, dem www-run das Scannen zu erlauben weiß ich auch schon. Ein einfaches Scan-Script (mit fixen Optionen) läuft ebenfalls bereits.

    1. Hallo Regina,

      leider habe ich kein Linux und kann Dir darum kein Material für dein Script zukommen lassen.

      Rein softwaretechnisch rollen sich mir bei diesem Code allerdings die Fußnägel auf. Für ein erstes Experiment OK, keine Einwände, aber als dauerhafte Software-Lösung, die wartbar sein soll, kommt es mir sehr unbrauchbar vor. Das wolltest Du jetzt vielleicht nicht hören, aber wenn Du Code vorzeigst, wird er auch angeguckt 😀

      Da sollte es eine Klasse Scanner geben mit Attributen Name und Options, sowie eine abstrakte ScannerOption Klasse mit Subklassen RangeOption und EnumerationOption (oder FromToOption und OneOfOption, um bei deiner Terminologie zu bleiben).

      Rolf

      --
      sumpsi - posui - clusi
      1. Rein softwaretechnisch rollen sich mir bei diesem Code allerdings die Fußnägel auf.

        Ich bin bezüglich der Scannererkennung und der daraus folgenden Formulargenerierung quasi noch bei der Machbarkeitsstudie...

      2. hi @Rolf B

        Da sollte es eine Klasse Scanner geben mit Attributen Name und Options, sowie eine abstrakte ScannerOption Klasse mit Subklassen RangeOption und EnumerationOption (oder FromToOption und OneOfOption, um bei deiner Terminologie zu bleiben).

        Nun, Du willst OOP. Eine zweckmäßige Datenstruktur ist da Bedingung: Damit die Getter wissen wo sie hingreifen müssen.

        Hier hab ich das schonmal vorbereitet.

        MfG

    2. hi

      So wie ich das Überschauen kann: optionName ist eindeutig. Das bietet sich also als Schlüssel an. D.h., Die Datenstruktur kann man zwckmäßiger aufsetzen, Beispiel:

      {
        resolution: {
          Type: OnOf,
          defaultValue: 200,
          unit: dpi,
          values: [100,150,200,300,400,600]
        },
        mode: {...}
      };
      

      Wegen der Adressierbarkeit. Und eine einfache Abfrage, welche Options es gibt.

      MfG

  2. Aloha ;)

    Jetzt hab ich natürlich nicht gerade eine große Scannersammlung... und brauche deshalb als Examples eben diese Ausgaben.

    Ich würde dir gerne helfen, aber mein am Netzwerk hängendes Multifunktionsgerät (Epson SX420W) hier hab ich unter Linux leider bisher nicht zum Laufen bekommen - da funktioniert nur das Drucken.

    Ich kann dir also leider keine Daten liefern.

    Falls du spontan was weißt, wie ich das Gerät zum Laufen bekomme kann ichs gerne nochmal versuchen. Ich habs bisher mit den vom Hersteller zur Verfügung gestellten Treibern versucht, aber damit kann zumindest das Linuxmint-Standard-Scanprogramm nichts anfangen. Vielleicht hängts auch daran, dass das Gerät nicht per USB angeschlossen ist? Viel probiert hab ich noch nicht; meistens bin ich sowieso am Windows-Rechner wenn ich was scannen will.

    Grüße,

    RIDER

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
    # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
    1. Wegen den Cookies kann ich Dich (wohl) nicht direkt zum Download schicken... Hier also die Einstiegsseite.

      Aber ich versuchs mal:

      1. Debian-artige (Ubuntu, Mint,...)

      2. RPM-basierte: (RedHat, CentOs, SuSE)

      Ubuntu behauptet, damit (iscan) geht es, wenn die Pakete sane und libltdl7 installiert sind.

      1. Aloha ;)

        Vielen Dank für die Hilfe! Leider löst es mein konkretes Problem noch nicht vollständig - denn der Scanner wird übers Netzwerk leider immer noch nicht erkannt; Drucken geht übers Netzwerk.

        Aber mit USB-Verbindung und iscan tuts - daher nun mal auf jeden Fall für dich die entsprechende Ausgabe von scanimage -A:

        
        All options specific to device `epson2:libusb:001:005':
          Scan Mode:
            --mode Lineart|Gray|Color [Lineart]
                Selects the scan mode (e.g., lineart, monochrome, or color).
            --depth 8bit [inactive]
                Number of bits per sample, typical values are 1 for "line-art" and 8
                for multibit scans.
            --halftoning None|Halftone A (Hard Tone)|Halftone B (Soft Tone)|Halftone C (Net Screen)|Dither A (4x4 Bayer)|Dither B (4x4 Spiral)|Dither C (4x4 Net Screen)|Dither D (8x4 Net Screen)|Text Enhanced Technology|Download pattern A|Download pattern B [inactive]
                Selects the halftone.
            --dropout None|Red|Green|Blue [None]
                Selects the dropout.
            --brightness 0..0 [inactive]
                Selects the brightness.
            --sharpness -2..2 [inactive]
                
            --gamma-correction User defined (Gamma=1.0)|User defined (Gamma=1.8) [User defined (Gamma=1.8)]
                Selects the gamma correction value from a list of pre-defined devices
                or the user defined table, which can be downloaded to the scanner
            --color-correction None|Built in CCT profile|User defined CCT profile [inactive]
                Sets the color correction table for the selected output device.
            --resolution 75|300|600|1200dpi [75]
                Sets the resolution of the scanned image.
            --threshold 0..255 [128]
                Select minimum-brightness to get a white point
          Advanced:
            --mirror[=(yes|no)] [inactive]
                Mirror the image.
            --auto-area-segmentation[=(yes|no)] [inactive]
                Enables different dithering modes in image and text areas
            --red-gamma-table 0..255,...
                Gamma-correction table for the red band.
            --green-gamma-table 0..255,...
                Gamma-correction table for the green band.
            --blue-gamma-table 0..255,...
                Gamma-correction table for the blue band.
            --wait-for-button[=(yes|no)] [no]
                After sending the scan command, wait until the button on the scanner
                is pressed to actually start the scan process.
          Color correction:
            --cct-type Automatic|Reflective|Colour negatives|Monochrome negatives|Colour positives [inactive]
                Color correction profile type
            --cct-profile -2..2,...
                Color correction profile data
          Preview:
            --preview[=(yes|no)] [no]
                Request a preview-quality scan.
          Geometry:
            -l 0..215.9mm [0]
                Top-left x position of scan area.
            -t 0..297.18mm [0]
                Top-left y position of scan area.
            -x 0..215.9mm [215.9]
                Width of scan-area.
            -y 0..297.18mm [297.18]
                Height of scan-area.
          Optional equipment:
            --source Flatbed [inactive]
                Selects the scan source (such as a document-feeder).
            --auto-eject[=(yes|no)] [inactive]
                Eject document after scanning
            --film-type Positive Film|Negative Film|Positive Slide|Negative Slide [inactive]
                
            --focus-position Focus on glass|Focus 2.5mm above glass [inactive]
                Sets the focus position to either the glass or 2.5mm above the glass
            --bay 1|2|3|4|5|6 [inactive]
                Select bay to scan
            --eject [inactive]
                Eject the sheet in the ADF
            --adf-mode Simplex|Duplex [inactive]
                Selects the ADF mode (simplex/duplex)
        
        
        

        Bin mal gespannt, ob ich fürs Scannen via Netzwerk noch eine Lösung finde.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
        1. Aloha ;)

          Bin mal gespannt, ob ich fürs Scannen via Netzwerk noch eine Lösung finde.

          Ein manueller Eintrag mit der IP-Adresse in /etc/sane.d/epson2.conf hat die Sache gelöst. iscan findet zwar immer noch nichts über das Netzwerk (seltsam?), aber Simple Scan lässt mich den Scanner bedienen.

          Ich habe für das Funktionieren von iscan noch versucht, einen manuellen Eintrag in /etc/sane.d/epkowa.confvorzunehmen, aber dann hängt sich nur alles auf.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
          # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
  3. Hello,

    nützt dir die Ausgabe von scanimage -A von meinem Snapscan? Das ist ein uralter Agfa-Scanner; leider zur Zeit der einzige, der bei mir noch läuft.

    
    tschmieder@traveller:~$ scanimage -A
    p11-kit: invalid config filename, will be ignored in the future: /etc/pkcs11/modules/gnome-keyring-module
    [snapscan] Scanner warming up - waiting 15 seconds.
    
    All options specific to device `snapscan:libusb:005:003':
      Scan Mode:
        --resolution auto||50|75|100|150|200|300|450|600dpi [300]
            Sets the resolution of the scanned image.
        --preview[=(auto|yes|no)] [no]
            Request a preview-quality scan.
        --mode auto|Color|Halftone|Gray|Lineart [Color]
            Selects the scan mode (e.g., lineart, monochrome, or color).
        --preview-mode auto|Auto|Color|Halftone|Gray|Lineart [Auto]
            Select the mode for previews. Greyscale previews usually give the best
            combination of speed and detail.
        --high-quality[=(auto|yes|no)] [no]
            Highest quality but lower speed
        --source auto|Flatbed [inactive]
            Selects the scan source (such as a document-feeder).
      Geometry:
        -l auto|0..216mm [0]
            Top-left x position of scan area.
        -t auto|0..297mm [0]
            Top-left y position of scan area.
        -x auto|0..216mm [216]
            Width of scan-area.
        -y auto|0..297mm [297]
            Height of scan-area.
        --predef-window None|6x4 (inch)|8x10 (inch)|8.5x11 (inch) [None]
            Provides standard scanning areas for photographs, printed pages and
            the like.
      Enhancement:
        --depth 8bit [inactive]
            Number of bits per sample, typical values are 1 for "line-art" and 8
            for multibit scans.
        --quality-cal[=(yes|no)] [yes]
            Do a quality white-calibration
        --halftoning[=(yes|no)] [inactive]
            Selects whether the acquired image should be halftoned (dithered).
        --halftone-pattern DispersedDot8x8|DispersedDot16x16 [inactive]
            Defines the halftoning (dithering) pattern for scanning halftoned
            images.
        --custom-gamma[=(yes|no)] [no]
            Determines whether a builtin or a custom gamma-table should be used.
        --analog-gamma-bind[=(yes|no)] [no]
            In RGB-mode use same values for each color
        --analog-gamma 0..4 [inactive]
            Analog gamma-correction
        --analog-gamma-r 0..4 [1.79999]
            Analog gamma-correction for red
        --analog-gamma-g 0..4 [1.79999]
            Analog gamma-correction for green
        --analog-gamma-b 0..4 [1.79999]
            Analog gamma-correction for blue
        --gamma-table 0..65535,... (in steps of 1) [inactive]
            Gamma-correction table.  In color mode this option equally affects the
            red, green, and blue channels simultaneously (i.e., it is an intensity
            gamma table).
        --red-gamma-table 0..65535,... (in steps of 1) [inactive]
            Gamma-correction table for the red band.
        --green-gamma-table 0..65535,... (in steps of 1) [inactive]
            Gamma-correction table for the green band.
        --blue-gamma-table 0..65535,... (in steps of 1) [inactive]
            Gamma-correction table for the blue band.
        --negative[=(auto|yes|no)] [inactive]
            Swap black and white
        --threshold 0..100% (in steps of 1) [inactive]
            Select minimum-brightness to get a white point
        --brightness -400..400% (in steps of 1) [0]
            Controls the brightness of the acquired image.
        --contrast -100..400% (in steps of 1) [0]
            Controls the contrast of the acquired image.
      Advanced:
        --rgb-lpr auto|1..50 (in steps of 1) [4]
            Number of scan lines to request in a SCSI read. Changing this
            parameter allows you to tune the speed at which data is read from the
            scanner during scans. If this is set too low, the scanner will have to
            stop periodically in the middle of a scan; if it's set too high,
            X-based frontends may stop responding to X events and your system could
            bog down.
        --gs-lpr auto|1..50 (in steps of 1) [inactive]
            Number of scan lines to request in a SCSI read. Changing this
            parameter allows you to tune the speed at which data is read from the
            scanner during scans. If this is set too low, the scanner will have to
            stop periodically in the middle of a scan; if it's set too high,
            X-based frontends may stop responding to X events and your system could
            bog down.
    
    

    Der läuft auch nur noch mit Linux. Die Scanprogramme dafür unter Windows haben alle am selben Tag die Leistung verweigert :-(

    Ich muss mir im November spätestens einen neuen kaufen. Was sollte ich beachten? Welcher ist empfehlenswert. Es mus nicht der billigste sein, aber auch nicht aus Gold.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Uff. Die haben die Hilfetexte offenbar komplett von Hand geschrieben. Ich frage mich, wie ich das "geparst" bekomme.

      Ich muss mir im November spätestens einen neuen kaufen. Was sollte ich beachten? Welcher ist empfehlenswert?

      Schwer zu sagen. Was soll er denn können? Flachbett oder Einzug? Wie schnell soll er sein? Auflösung, Farben,...?

      1. Hello,

        Ich muss mir im November spätestens einen neuen kaufen. Was sollte ich beachten? Welcher ist empfehlenswert?

        Schwer zu sagen. Was soll er denn können? Flachbett oder Einzug? Wie schnell soll er sein? Auflösung, Farben,...?

        Am liebsten hätte ich wohl einen A3-Scanner.

        Und wenn der dann sonst so ungefähr das könnte, was mein alter HP3C konnte, würde mir das schon reichen. Der steht leider auch tot in der Ecke, weil auch bei dem alle Software-Tools pünktlich versagt haben. Leider habe ich an meinen Linux-Hosts keine SCSI-Schnittstelle mehr. Aber ich würde glatt wetten, dass der es da auch noch tun würde.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
      2. Hallo Regina,

        Das ist doch mal ein cooler Testfall. Da führt das entspannte Einlesen einer kleinen Datei spontan zu mittleren Verkrampfungen 😂

        Ich frage mich, wie ich das "geparst" bekomme.

        Bad News 1: Zwischenüberschriften, d.h. Parametergruppen
        Bad News 2: FromTo-Parameter mit alternativem auto
        Bad News 3: Mehrzeilige Beschreibungen
        Bad News 4: In den eckigen Klammern steht nicht der Default, sondern was anderes [inactive]
        Bad News 5: Parameter mit optionalem = und Wert
        Bad News 6: Range-Angabe mit Step

        Good News 1: Die Section-Header beginnen konsequent auf Pos. 3
        Good News 2: Die Parameter beginnen nach wie vor auf Pos. 5
        Good News 3: Die Description beginnt nach wie vor auf Pos. 8, und die mehrzeiligen Descriptions scheinen Fließtext zu sein. Keine Paragraphenbildung.

        Eigentlich gar nicht mal so wild. Aber der Tyrannosaurus Regex, der müsste jetzt wohl mal langsam an den Start. Bevor Du ANTLR aus der Kiste holst...

        Rolf

        --
        sumpsi - posui - clusi
      3. Hello,

        Schwer zu sagen. Was soll er denn können? Flachbett oder Einzug? Wie schnell soll er sein? Auflösung, Farben,...?

        Die Begehrlichkeiten wachsen mit dem Angebot, was wieder meine Theorie unterstützt, dass nicht die Kunden den Markt machen, sondern das Angebot die Kunden generiert ;-)

        Ethernetschnittstelle und A3. Wobei ich vermute, dass A3 da nur mittels Einzug geht...

        Und ich müsste noch lange darauf sparen.
        BTW: @Camping_RIDER: bleibt von der RK-Abrechnung noch was übrig?

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Aloha ;)

          Und ich müsste noch lange darauf sparen.
          BTW: @Camping_RIDER: bleibt von der RK-Abrechnung noch was übrig?

          Ich muss die Reisekostenerstattung leider noch zurückhalten. Wir verrechnen die ja mit der JuHe-Rechnung, aber leider sind in der noch Unstimmigkeiten (ich vermute: die haben @Gunnar Bittersmann nicht und dich dafür als Einzelzimmer abgerechnet) und die JuHe prüft den Fall jetzt noch. Ich kann also erst abrechnen (und die Reisekosten überweisen) sobald ich von der JuHe eine klare Ansage habe.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
          # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
  4. Hi

    Ich schreibe gerade ein PHP-Skript, welches zum Scannen dienen soll. Statt irgendwelche fixen Werte (Scanner, Scanbereich, Modus, Feed) vorzugeben will ich diese auslesen und in einem Formular anbieten. Dazu dient

    scanimage -A
    

    Warum der Umweg über die Kommandozeile? Es gibt Scanner die kommunizieren über HTTP, dem Layer wo auch Deine Anwendung angesiedelt ist.

    MfG

    1. Es gibt Scanner die kommunizieren über HTTP

      Und viele, die das nicht tun. Aber alles, was nicht Web- aber Kommandozeile-fähig ist, kann man Webfähig machen. Und zwar GENAU so, wie man es will...

      1. Es gibt Scanner die kommunizieren über HTTP

        Und viele, die das nicht tun. Aber alles, was nicht Web- aber Kommandozeile-fähig ist, kann man Webfähig machen. Und zwar GENAU so, wie man es will...

        Natürlich. Ich frage mich nur, wozu das alles gut sein soll was Du da machst. Für die Kommandozeile kann man Batchdateien mit sprechenden Namen bereitstellen was die Bedienung vereinfacht. Und gewöhnlich hat ein Twaintreiber auch eine GUI wo man sich seine ScanOptions zusammenklickt. Jede Anwendung die Bilder holen kann, bringt die GUI der Twaindatenquelle auf den Desktop. Und apropos Desktop, auch der Scanner selbst sollte möglichst in der Nähe dessen rumstehen. Alles zusammen ergibt eine PC/Desktopanwendung für den lokalen Betrieb.

        MfG

        1. Ich frage mich nur, wozu das alles gut sein soll was Du da machst.

          Der Plan ist über kurz oder lang den Scanner an einen Raspi hängen und ggf. sogar vom Smartphone aus scannen, kopieren, drucken und faxen. Und das auch mit einem neuen Scanner - ohne Skripte neu schreiben zu müssen.

          Ich kann es. Ich will es. Also mach ich es.

          1. Ich kann es. Ich will es. Also mach ich es.

            Natürlich. Irgendwie muss man sich ja beschäftigen.

            ggf. sogar vom Smartphone aus scannen, kopieren, drucken und faxen

            Und wer legt die Scanvorlage auf den Scanner?

            1. Hallo pl,

              Ich kann es. Ich will es. Also mach ich es. Natürlich. Irgendwie muss man sich ja beschäftigen. ggf. sogar vom Smartphone aus scannen, kopieren, drucken und faxen Und wer legt die Scanvorlage auf den Scanner?

              g

              Bis demnächst
              Matthias

              --
              Pantoffeltierchen haben keine Hobbys.
            2. Und wer legt die Scanvorlage auf den Scanner?

              Tja. Wenn man keine sachlichen Anhaltspunkte für die Auswahl hat kann man das z.B. anhand der Hierarchie bestimmen, dem freien Wille der Subjekte überlassen oder halt auslosen...

              1. Und wer legt die Scanvorlage auf den Scanner?

                Tja. Wenn man keine sachlichen Anhaltspunkte für die Auswahl hat kann man das z.B. anhand der Hierarchie bestimmen, dem freien Wille der Subjekte überlassen oder halt auslosen...

                Genau. Aber dazu braucht man kein Smartphone. Und auch keinen Ras-Pi.

                Schönen Feiertag noch.

                1. Aber dazu braucht man kein Smartphone.

                  Naja. Spätestens um Dich anzurufen, Dir zu sagen, dass Du doch bitte Deine(n) Scanner an eine Kiste mit Linux anschließen und [sudo] scanimage -A tippen mögest ist das schon nützlich…

                  1. Aber dazu braucht man kein Smartphone.

                    Naja. Spätestens um Dich anzurufen, Dir zu sagen, dass Du doch bitte Deine(n) Scanner an eine Kiste mit Linux anschließen und [sudo] scanimage -A tippen mögest ist das schon nützlich…

                    Ich kann Dir auch ohne Raspi, Linux und Smartphone meinen Scanner, Drucker und Fax über TCP/IP forwarden. Also wenn Du mal was Scannen, drucken oder faxen willst... kein Problem. Schicks am Besten mit der Post aber ruf vorher an 😉

                    MfG

                    1. Jetzt hör schon auf. Wenn es Dir an Phantasie dazu fehlt, mögliche Anwendungsszenarien zu erkennen, dann solltest Du das nicht noch überdeutlich machen, in dem Du eben diese Phantasielosigkeit derart notorisch breit trittst.

                      Einen nenn ich Dir mal:

                      1. Einen nenn ich Dir mal:

                        Verständlich. Aber die Praxis ist nunmal so, daß meine Frau mich anrufen muss, wenn sie übers WLAN was scannen will. Sie kann zwar den Scanvorgang starten, aber ich muss die Zettelchen vorher auflegen. Sonst kommen ja nur weiße Seiten.

                        Am Besten haben wir so gescannt: Meine Frau legt auf und ich klicke. Dabei befanden wir uns in demselben Raum. Was den unstrittigen Vorteil hat, daß das Telefonieren wegfällt.

                        MfG

                        PS: Als wir heute über die A6 an der Fabrik vorbei kamen fiel mir eine lustige Geschichte wieder ein. Da hab ich vor Jahren mal einen Kunden in der BASF angerufen wg. Netzwerkproblem und ihn darum gebeten, er möge doch mal den Drucker auf einen anderen Switchport stecken.

                        Der Kunde war gottseidank ein netter Mensch und erklärte mir auf kurpälzisch, daß er etwa eine Stunde brauchen würde für die fünf Kilometerchen 😉

                    2. Hallo,

                      Schicks am Besten mit der Post aber ruf vorher an 😉

                      Und mach bitte ein Foto mit dem Smartphone davon, das dann per whatsapp geschickt wird, damit man weiß ob in Farbe oder s/w gescannt werden soll…

                      Gruß
                      Kalk

                      1. Und mach bitte ein Foto mit dem Smartphone davon

                        Nicht, dass es da nicht gibt (Link zu Amazon). Aber dann wäre noch der Umstand, dass ein anderer den Scan letztendlich z.B. auf einen Laptop haben will. Und manche müssen auch im Jahr 2018 noch fristwahrende Tele-Faxen machen, weil andere, statt ihren Public-Key zu veröffentlichen, fürchterlich komplizierte Prozeduren erfinden - die dann nicht (und schon gar nicht sicher) funktionen.

          2. Aloha ;)

            Der Plan ist über kurz oder lang den Scanner an einen Raspi hängen und ggf. sogar vom Smartphone aus scannen, kopieren, drucken und faxen. Und das auch mit einem neuen Scanner - ohne Skripte neu schreiben zu müssen.

            Wenn du zu einer Endlösung in dieser Scannerfrage kommst, gib laut. Ich wäre da prinzipiell auch dran interessiert, sobald dein Programm läuft.

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
            # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
            1. Hallo Camping_RIDER

              Wenn du zu einer Endlösung in dieser Scannerfrage kommst […]

              Ich kann nicht mit dem Finger darauf zeigen, aber irgendwie habe ich ein schlechtes Gefühl bei der Sache. ;-)

              1. Jaja. Böses Wort detektiert. Dabei gibt's bei Software gar keine endgültige Lösung, weil immer jemandem einfällt, was was man noch, anders oder besser machen könnte.

                @Camping_RIDER

                Gar kein Problem wäre die Unterstützung der Standard-Optionen laut man 1 scanimage.

                Grüße aus dem Zug.

            2. Hello,

              Der Plan ist über kurz oder lang den Scanner an einen Raspi hängen und ggf. sogar vom Smartphone aus scannen, kopieren, drucken und faxen. Und das auch mit einem neuen Scanner - ohne Skripte neu schreiben zu müssen.

              Wenn du zu einer Endlösung in dieser Scannerfrage kommst, gib laut. Ich wäre da prinzipiell auch dran interessiert, sobald dein Programm läuft.

              ... ich auch, inklusive der Scanner von Euch beiden ;-P

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
              1. Aloha ;)

                ... ich auch, inklusive der Scanner von Euch beiden ;-P

                Wenn ich dafür einen neuen mit Einzug bekomme, gerne 😝

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
                # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
                1. Wenn ich dafür einen neuen mit Einzug bekomme, gerne 😝

                  Die sind echt gut. Das ist ein schwarz-weiß-Scan. Sowas schlägt alle Rekorde.