• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Bilder(scans?) überwiegend einfarbige Ränder entfernen

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Beispiel:
0001-016.jpg

Die Seitenzahl unten geht planmäßig verloren.
Wenns keinen eindeutigen Rand wie den gibt einfach nicht bearbeiten ich brauche kleine 100% eine deutlich sichtbare Verbesserung mit möglichst wenig Aufand ist das Ziel. Bei manchen Seiten ist der Rand den ich entfernen will komplett schwarz bzw überwiegend schwarz. allerdings im sleben verhältnis wie hier weiss. Nur eben invertiert. 2 Wählbare mögliche Hintergrundfarben würden eventuell auch reichen. Wie gesagt, ich erwarte keine 100%.

Mit Gimp könnte man das afaik schon scripten, allerdings habe ich so gut wie keine Erfahrung mit Gimp. Für PDF's gibts auch einiges an tools, aber ich will halt zum bearbeiten nicht vorher und nachher konvertieren. Da kommt dann eh nix erträgliches mehr raus.

edit:
Ja, das bedeutet ich kann mir Linklisten von Kissmanga dumpen. Bei Interesse PN.
Das funktioniert ~99,6% automatisch und zuverlässig, hat aber kein schönes Interface.

Antwort so weit:
[src=bash]#!/bin/bash
for d in *.jpg ; do
./autotrim -f 30 $d converted/$d
convert converted/$d -remap sample16.gif converted/$d.gif
done[/src]
 
Zuletzt bearbeitet:

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
Photoshop Aktion? Sollte relativ easy sein wenn die Ränder auf den Bilder immer an den selben Stellen (Oben und Unten) weg fallen sollen. Einfach an einem Bild machen und diese Aktion aufnehmen und dann auf den ganzen Ordner anwenden... Um wie viele Bilder handelt es sich? Ist es evtl möglich vorher die Bilder auszusortieren wo keine Ränder weg fallen? Automatisieren ist halt immer so ne Sache wenn es nicht bei allen Bilder die selbe Aktion ist.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Interessante Seite.... (die Imagemagick Skript Sammlung!) :)

Auf der Seite ist mir sofort das hier ins Auge gestoßen: Autotrim ( http://www.fmwconcepts.com/imagemagick/autotrim/index.php )
Sieht eigentlich genau nachdem aus, was wohl gesucht ist.

Oder wenn du programmieren wollen würdest:
Ansonsten würde ich es persönlich so machen, das Format laden bei dem man Zugriff auf die Farbwerte der Pixel hat. Zum Beispiel in Python und Imagemagick Bindings, dann einstellen wie viele Pixel einen Rahmen definieren und eventuell in welcher Farbe und dann die Rändern vom Rand ausgehend alle 2-X Pixel (je nach Bilddimensionen) zur Bildmitte mit einer Toleranz von X (einstellbar) (bei schwarzem Rand) abgetastet werden soll. Okay, bei Schwarzweiß Bildern ist das vielleicht etwas problematischer als wenn man Farbfotos hat die einen Rahmen haben, Hat man in der Höhe (oben nach unten, unten oben) oder Breite (links rechts, rechts links) X + Toleranz Pixel verarbeitet, wird man wohl auf die Ränder des Bildes treffen. Dazu würde ich allerdings noch einen Parameter angeben wollen, wie breit der Rand mindestens sein soll, der belassen wird. Allerdings, wäre wohl bei dieser Methode der Crop des unteren Teils/Abschnitts mit im Gange, aber da müsste man wohl etwas weiter optimieren... / testen.

Aus den ermittelten Rändern würde ich dann den Durchschnitt nehmen und auch die Durchschnittshöhe an "schwarzen" oder "weißen" Pixeln bzw. überhaupt eines Farbwertes der häufiger auftaucht... vielleicht auch mit mehrere Abtastungen bei dem der Rand dynamisch verkleinert wird, um einen "validen" Treffer zu erzielen. Von mindestens X Pixel hoch zu Y.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #5
Die Ränder sind nicht immer an der sleben Stelle, das wäre zu einfach.:p

Es geht auch ums erkennen der Ränder Imagemick will nicht, sind vermutlich Verläufe drin. Das sehe ich als Bestätigung für die Scan Theorie. Bei Imagemick habe ich nicht wirklich gefunden was da entstört und wie ich das im Zweifel auch auf den Rand begrenze. Das ganze wir schon was komplizierter. Die Rahmen sind zwar ziemlich deutlich, aber das wars auch schon.

edit:
autotrim habe ich noch nicht gesehn, nur trim.

edit2:
Imagemick kotzt mich langsam aber sicher extrem an, muss man den scheiss für jede Option mit anderen Parametern installieren?:rolleyes:
In anderen Worten, die Funktion wurde wieder nicht gefunden obwohl ich die legacy option schon aktiviert habe.

edit3:
Ach die skrpte haben nix mit dem Imagemick installer zu tun, die Anleitung dienst der Bedienung der Scripte die separat geladen werden müssen.
Okay, soweit so gut, autotrim scheint nur paramtertechnisch irgendwie anders zu funktionieren. Selbst "autotrim -h" gibt geschätzte 500 "file not found" fehlermeldungen. (Output zu lang um einfach raus zu kopieren, wie gehen pipes in windows?)
Oder es beruft sich auf andere Installationsparamater von Imagemick....
last modified: October 02, 2015
tjaaa...
Gibts da irgendwo eine Kompatiblitätstabelle?
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Gibts da irgendwo eine Kompatiblitätstabelle?

Du könntest höchstens versuchen dir die Release Notes/Changelogs zu Gemüte zu führen:
Zum Beispiel, https://www.imagemagick.org/script/changelog.php

Aber dafür solltest du wissen welcher Befehl wie und warum fehlschlägt... was anderes wüsste ich auf die schnelle nicht. :)

PS: Kannst du mal ein Packen von den Scans (5-10), bunte Auswahl hochladen - ich würde mich gerne daran versuchen, da ich aktuell Zeit habe... wäre ganz nett. :)

Edit:
Wenn du dir Pillow und Python3 installieren kannst, mit allen Abhängigkeiten, kannst du ja mal das hier probieren, das funktioniert eigentlich (mit genau diesen Settings) ganz gut bei deinem Beispielbild:

[src=python]#!/usr/bin/python3
from glob import glob
from math import ceil
from PIL import Image

# READS FROM "input/files.jpg"
# SAVE TO "output/files.jpg"

inputList = glob("input/*.jpg")

#-------------------------------------------------------------------------------
# OPTIONS
borderSize = 5 # The amount of pixels which (should) define a border
maxSearchWidth = 120 # The max search in pixels of the edges
borderColor = (5, 5, 5) # Border color in RGB which is valid as border
borderColorVariantion = 3 # How many levels each pixel is allowed to differ from borderColor to be counted as borderpixel
tolerancePixels = 5 # Pixel tolerance from which border pixels can be apart (more seems to be required!)
space = 2; # The space minimum to be left from detected edges (can be negative)
estimationSteps = 100 # How many steps the image should be gone through in x and y


#-------------------------------------------------------------------------------
borderColorSum = sum(borderColor)
borderColorVariantion = borderColorVariantion * 3;

borderColorSumLow = borderColorSum - borderColorVariantion;
borderColorSumHigh = borderColorSum + borderColorVariantion;

for picture in inputList:
cordsTB = [];
cordsBT = [];
cordsLR = [];
cordsRL = [];

pic = Image.open(picture)
pixels = pic.load()
#print(pic.format, pic.size, pic.mode)
#pic.show()

testLR = ceil(pic.size[0] / estimationSteps)
testTB = ceil(pic.size[1] / estimationSteps)

#---------------------------------------------------------------------------
# RIGHT LEFT DETERMINATION
cordsTB = []
cordsBT = []
step = 0

for x in range(0, pic.size[0], testLR):
cordsTB.append([])
cordsBT.append([])
for y in range(0, maxSearchWidth):
pixelValue = sum(pic.getpixel((x,y)));
if pixelValue >= borderColorSumLow and pixelValue <= borderColorSumHigh:
cordsTB[step].append(y)

for y in range(pic.size[1]-maxSearchWidth, pic.size[1]):
pixelValue = sum(pic.getpixel((x,y)));
if pixelValue >= borderColorSumLow and pixelValue <= borderColorSumHigh:
cordsBT[step].append(y)

step += 1


#---------------------------------------------------------------------------
# LEFT-RIGHT DETERMINATION
cordsLR = []
cordsRL = []
step = 0

for y in range(0, pic.size[1], testTB):
cordsLR.append([])
cordsRL.append([])
for x in range(0, maxSearchWidth):
pixelValue = sum(pic.getpixel((x,y)));
if pixelValue >= borderColorSumLow and pixelValue <= borderColorSumHigh:
cordsLR[step].append(x)

for x in range(pic.size[0]-1, pic.size[0]-maxSearchWidth, -1):
pixelValue = sum(pic.getpixel((x,y)));
if pixelValue >= borderColorSumLow and pixelValue <= borderColorSumHigh:
cordsRL[step].append(x)

step += 1

#---------------------------------------------------------------------------
# CROPPING ESTIMATES
# TOP CROP
initialCoords = []
for coordinates in cordsTB:
try:
starting = coordinates[0]
currentSize = 1

for coord in coordinates[1:]:
if (coord - tolerancePixels) <= starting:
currentSize += 1

if currentSize == borderSize:
initialCoords.append(starting)
break;
else:
starting = coord
currentSize = 1
except:
pass

if len(initialCoords) != 0:
top = initialCoords[0]
for coord in initialCoords:
if coord < top:
top = coord
else:
top = 0

#---------------------------------------------------------------------------
# BOTTOM CROP
initialCoords = []
for coordinates in cordsBT:
try:
starting = coordinates[0]
currentSize = 1
for coord in coordinates[1:]:
if (coord - tolerancePixels) >= starting:
currentSize += 1

if currentSize == borderSize:
initialCoords.append(starting)
break;
else:
starting = coord
currentSize = 1
except:
pass


if len(initialCoords) != 0:
bottom = initialCoords[0]
for coord in initialCoords:
if coord > bottom:
bottom = coord
else:
bottom = pic.size[1]


#---------------------------------------------------------------------------
# LEFT CROP
initialCoords = []
for coordinates in cordsLR:
try:
starting = coordinates[0]
currentSize = 1
for coord in coordinates[1:]:
if (coord - tolerancePixels) >= starting:
currentSize += 1

if currentSize == borderSize:
initialCoords.append(starting)
break;
else:
starting = coord
currentSize = 1
except:
pass

if len(initialCoords) != 0:
left = initialCoords[0]
for coord in initialCoords:
if coord < left:
left = coord
else:
left = 0

#---------------------------------------------------------------------------
# RIGHT CROP
initialCoords = []
for coordinates in cordsRL:
try:
starting = coordinates[0]
currentSize = 1
for coord in coordinates[1:]:
if (coord - tolerancePixels) >= starting:
currentSize += 1

if currentSize == borderSize:
initialCoords.append(starting)
break;
else:
starting = coord
currentSize = 1
except:
pass

if len(initialCoords) != 0:
right = initialCoords[0]
for coord in initialCoords:
if coord > right:
right = coord
else:
right = pic.size[0]


# EDGE SPACING
if (left - space) >= 0:
left -= space

if (top - space) >= 0:
top -= space

if (right + space) <= pic.size[0]:
right += space

if (bottom + space) <= pic.size[1]:
bottom += space;

# CROPPED
pic = pic.crop((left, top, right, bottom))

# SAVE
pic.save("output/"+ picture.replace("input/", "", 1));

# SHOW
#pic.show()
[/src]
 
Zuletzt bearbeitet:

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #7
python kann ich zwar nicht, ist aber selbst unter Windows trotzdem immer installiert als Taschenrechner.

Mit Pillow kann ich allerdings abseits vom Textilprodukt nix anfangen. Da bräuchte ich konkretere Infos. Genauso wie zu Python unter Umständen wenn einfach ausführen mit nicht ausreicht.
Da ich jetzt allerdings auch weiss das es sich bei den Imagemick skripten um bash handelt kann ich das natürlich auch nochmal testen falls imagemick in den Paketquellen von Debian ist.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Imagemagick ist definitiv in den Paketquellen... eigentlich "überall", weil schon lange Standard.

Du kannst es ja erstmal damit versuchen, und wenn das nicht hinhaut, dich nochmal melden.

Informationen zu Pillow findest du hier: https://pypi.python.org/pypi/Pillow/4.1.1 .
Mehr steht aber auch hier: http://pillow.readthedocs.io/en/4.1.x/

Ich musste es für Debian selbst bauen, aber da wirst du ein paar Sachen für brauchen, ich musste nur ein paar Bibliotheken nachinstallieren um kompilieren zu können. Und dann zu installieren.

Die Quelle findet man hier: https://github.com/python-pillow/Pillow
Zum bauen reicht ein:
"python3 setup.py build" (wenn alle Abhängigkeiten vorhanden sind (steht in der Doku, (libjpeg8/9-dev, libtiff5-dev reichen, zlib))
und danach
"sudo python3 setup.py install"

Zur Deinstallation:
https://stackoverflow.com/questions/1550226/python-setup-py-uninstall

You need to remove all files manually, and also undo any other stuff that installation did manually.

If you don't know the list of all files, you can reinstall it with the --record option, and take a look at the list this produces.

To record list of installed files, you can use:

python setup.py install --record files.txt

Once you want to uninstall you can use xargs to do the removal:

cat files.txt | xargs rm -rf

oder wohl noch besser:

https://gist.github.com/myusuf3/933625/7619da2b8b3fa0619439dc2bb9a8429ca3656dae (erster Kommentar, "pip" bzw "pip3" zu verwenden)
 
Zuletzt bearbeitet:

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #9
Autotrim bringt auf die schnelle wirklich gute Ergebnisse.

Mich stört nur das die Datei anschließend größer ist. Allerdings weniger der Speicherbedarf als die Tatsache das es doch klar anzeigt das noch etwas mehr getan wird als Pixel zu entfernen. Allerdings kenne ich mich auch mit JPG nicht aus.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Du könntest mal schauen mit welcher Qualitätseinstellung das Bild gespeichern wird. Eventuell ist nur die Qualitätsstufe höher als die vom Original... um eben den Qualitätsverlust so gering wie möglich zu halten da JP(E)G verlustbehaftet komprimiert. Gut zu sehen an Artefakten an Texten die dann "aufpixeln".
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #12
Ausgezeichneter EInwand, ich wusste nicht das sowas bei JPG geht. Bei Farbstufen entferne denke ich primär an GIF ih weiss aber nicht ob der Reader das kann. Gleiches Problem bei JPG aber versuchen kostet nix. Also her damit, was würdest du vorschlagen?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Über Bash:
convert srcOutput1.jpg -colors 256 PNG8:dest.png

Und die Quelle "srcOutput1.jpg" danach mit "rm" löschen?

Sollte eigentlich gehen.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #14
Strenggenommen kann ich eh nur 16 Graustufen verwenden und so wie ich Marketing kenne ist da Weiss enthalten, was auch technisch sinn machen würde dann hätte ich sogar nur 4 Bit. Ist das ebenfalls ein etablierter Standard für JPG?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
8 Bit sind alle Grauabstufungen oder eben beschränkte 256 Farben in einer "Farbalette", das geht mit 8bit... GIF/PNG. PNG32 hat auch noch einen Alpha Kanal für jeden Pixel, also 255 "Voll sichtbar" / 0 "transparent".
Bei Gif kann man die Farbpalette dann sogar noch weiter reduzieren auf "x Farben" in der Palette, (zwischen 1 bzw. 2 und 256)

JPEG hat immer 24 Bit, also Rot, Grün, Blau, mit je 256 Abstufungen.

Das ist also kein JPG Feature - JPEG oder Photoshop / Gimp wenn du exportierst, erlauben dir für JPEG die Qualität einzustellen, je höher, desto weniger Artefakte (Rauschen) - aber größere Dateigröße.

Ich glaube du bringst gerade ein paar Dinge durcheinander ;) :D
 
Zuletzt bearbeitet:

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #16
Ohne Kenntnnisse gibts nichts durcheinander zu bringen ich habe lediglich die technische Tatsache angesprochen das ich strenggenommen nur 4 bit Informationen pro Pixel brauche, das ist eine Tatsache. Die Frage war also ziemlich genau so gemitn wie sie da steht.

Oder etwas anders formuliert:
Passt das in irgendeinen etablierten Standard für Bilddateien?

Ich habe gar keie AHnung von Bildbearbeitung aber low Level IT ist mir ein Begriff.
Ich könnte auf die Schnelle eine Spezifikation dafür schreiben, ich machs einfach mal jetzt aus Jux:
4 Byte Breite in Pixel
Jedes Byte beschreibt 2 Pixel
Jeder der 16 Werte steht für eine helligkeit von 0 Weiss bis 15 Schwarz

Fertig. Das darstellende Programm weiss wie breit das Bild ist und welches Bit was bedeutet. Fraglich bleibt nur ob der Standard irgendwo implementiert ist. Genau das war die Frage.
Breite geht maximal bis 4 Milliarden Pixel. Lässt sich unter umständen effizienter implementieren wenn man festlegt das in der Breite nur Werte gehen die durch 32 Teilbar sind. Dann hat man aber gleichzeitig auch mehr Maximalgröße 32 mal so viel. Durch die Feste Zeoielnbreite im Standard braucht man keine Markierung für eine Zeilenende. Was den Standard nicht kennt weigert sich entweder gleich das zu öffnen oder zeigt nur Datenmatsch an wie bei allen anderen Formaten auch.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Scheint wohl alles irgendwie möglich zu sein: https://stackoverflow.com/questions...tte-png-to-proper-4-bit-16-color-palette-with ;) . auch mit PNG - allerdings steht 0 für Farbe 1 (muß nicht weiß oder schwarz sein) und 16 (kann helles Blau sein).

Die Palette gibt keine Farben vor, sondern man sammelt die am 16 am häufigstens auftretenden Farben, zum Beispiel. Und speicher diese in einer Palette, aus diesem "Sammelsurium" werden dann die Pixel gefüllt an XY oder ähnlichem ;) 100% sicher bin ich mir da auch nicht, da es auf das Bildformat ankommt wie Pixel gespeichert werden bzw. optimiert sind.
 
Zuletzt bearbeitet:

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #18
Naja, bei GIF kann man afaik Farben vorgeben, zumindest läst einen GIMP sehr nah da dran.

GIF sollte übrigens gehen laut meinen Infos. Wie kann ich also am eiffzientesten auf 16 Farben reduzieren? Weiss über grau zu schwarz in gleichmässigen Abständen. Die Farbwerte Liste mache ich meinetwegen sogar von Hand, sind ja nur 16 und mit eineme Javascript colorpicker sollte das leicht zu machen sein.:D
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
  • Thread Starter Thread Starter
  • #20
Habs gerade mit einem getestet, kein erkennbarer Unterschied war zu erwarten. Die Dateigröße ist allerdings um ~10% gesunken. Die 16 Farben Gif hat nur 118KB während die JPG 131KB hat.(Die 255Farben GIF hatte über 300KB und GIF ist afaik ein sehr primitves Format also sollte jetzt alles besser sein.)

Nur wie bekomme ich die Farbpalette raus? Also mit welcher Option, wo finde ich die?

Edit:
16 Farben GIF:
0101-001.gif
Zeig mir jemanden der behauptet mehr als 10 Grautöne unterscheiden zu können und ich zeige dir einen Lügner.:p
 
Zuletzt bearbeitet:
Oben