αόρατα υδατογραφήματα σε εικόνες

ψήφοι
9

Πώς μπορείτε να τοποθετήσετε αόρατα υδατογραφήματα στις εικόνες για λόγους πνευματικών δικαιωμάτων; Ψάχνω για μια βιβλιοθήκη python.

Τι αλγόριθμο χρησιμοποιείτε; Τι γίνεται με τις επιδόσεις και την αποδοτικότητα;

Δημοσιεύθηκε 04/09/2008 στις 17:15
πηγή χρήστη
Σε άλλες γλώσσες...                            


11 απαντήσεις

ψήφοι
1

Τι γίνεται με Exif; Είναι πιθανόν να μην είναι τόσο ασφαλές όσο το τι σκέφτεστε, αλλά οι περισσότεροι χρήστες δεν γνωρίζουν καν ότι υπάρχει και αν το κάνετε τόσο εύκολο να διαβάσει τις πληροφορίες υδατογράφημα όσοι ενδιαφέρονται θα εξακολουθεί να είναι σε θέση να το κάνει έτσι κι αλλιώς.

Απαντήθηκε 04/09/2008 στις 17:33
πηγή χρήστη

ψήφοι
1

Δεν νομίζω ότι υπάρχει μια βιβλιοθήκη που το κάνει αυτό έξω από το κουτί. Αν θέλετε να εφαρμόσετε τις δικές σας, θα ήθελα να πάω οπωσδήποτε με τη Βιβλιοθήκη Python Imaging (PIL).

Αυτή είναι μια συνταγή Python Cookbook που χρησιμοποιεί PIL για να προσθέσετε ένα ορατό υδατογράφημα σε μια εικόνα. Αν είναι αρκετό για τις ανάγκες σας, μπορείτε να χρησιμοποιήσετε αυτό για να προσθέσετε ένα υδατογράφημα με αρκετή διαφάνεια που είναι ορατό μόνο αν ξέρετε τι ψάχνετε.

Απαντήθηκε 04/09/2008 στις 17:56
πηγή χρήστη

ψήφοι
6

Μπορεί να θέλετε να εξετάσει Στεγανογραφία? ότι η απόκρυψη των δεδομένων μέσα από εικόνες. Υπάρχουν μορφές που δεν θα χαθείτε αν μετατρέψετε σε μορφή lossier ή ακόμα και τμήματα των καλλιεργειών της εικόνας έξω.

Απαντήθηκε 04/09/2008 στις 18:18
πηγή χρήστη

ψήφοι
0

Ήμουν έτοιμος να δημοσιεύσετε μια απάντηση παρόμοια με Ugh. Θα ήθελα να προτείνω βάζοντας ένα μικρό αρχείο TXT που περιγράφει την πηγή της εικόνας (και ίσως μια μικρή δήλωση πνευματικών δικαιωμάτων, αν ισχύει μία) στην εικόνα με τρόπο που είναι δύσκολο να ανιχνευθούν και να σπάσει.

Απαντήθηκε 04/09/2008 στις 18:20
πηγή χρήστη

ψήφοι
0

Δεν είμαι σίγουρος πόσο σημαντικό είναι να είναι άθραυστο, αλλά μια απλή λύση θα μπορούσε απλώς να είναι να προσθέσετε ένα αρχείο κειμένου στο τέλος της εικόνας. Κάτι σαν «Αυτή η εικόνα ανήκει ...».

Αν ανοίξετε την εικόνα στο θεατή / πρόγραμμα περιήγησης, μοιάζει με ένα κανονικό jpeg, αλλά αν το ανοίξετε σε ένα πρόγραμμα επεξεργασίας κειμένου, η τελευταία γραμμή θα είναι αναγνώσιμο.

Η ίδια μέθοδος σας επιτρέπει να περιλαμβάνει ένα πραγματικό αρχείο σε μια εικόνα. ( Αποκρύψετε ένα αρχείο μέσα σε μια εικόνα ) έχω διαπιστώσει ότι είναι λίγο χτύπημα-και-χάσετε, αλλά τα αρχεία 7-zip φαίνεται να λειτουργεί. Θα μπορούσε να κρύψει όλα τα είδη των Copywrite καλούδια μέσα από την εικόνα.

Και πάλι, δεν είναι άθραυστο από οποιοδήποτε τέντωμα της φαντασίας, αλλά είναι εντελώς αόρατα με γυμνό μάτι.

Απαντήθηκε 04/09/2008 στις 18:45
πηγή χρήστη

ψήφοι
0

Μερικές μορφές εικόνας έχουν κεφαλίδες, όπου μπορείτε να αποθηκεύσετε αυθαίρετες πληροφορίες καθώς και.
Για παράδειγμα, η προδιαγραφή PNG έχει ένα κομμάτι όπου μπορείτε να αποθηκεύσετε τα δεδομένα κειμένου. Αυτό είναι παρόμοιο με τις απαντήσεις παραπάνω, χωρίς όμως την προσθήκη τυχαία δεδομένα με τα ίδια τα δεδομένα εικόνας.

Απαντήθηκε 04/09/2008 στις 18:59
πηγή χρήστη

ψήφοι
1

Ψάχνω για «Unbreakable» υδατογραφήματα, έτσι ώστε τα δεδομένα που αποθηκεύονται στο EXIF ​​ή τα μεταδεδομένα της εικόνας είναι έξω.

Έχω βρει κάποια ενδιαφέροντα πράγματα στο διαδίκτυο, ενώ σε αναμονή για τις απαντήσεις εδώ: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/

Υπάρχει μια μεταπτυχιακή εργασία που είναι αρκετά πλήρης για αλγόριθμους και caracteristics τους (ό, τι κάνουν και πώς άθραυστα είναι). Δεν έχω καθόλου χρόνο για να το διαβάσετε σε βάθος, αλλά αυτά τα πράγματα φαίνεται σοβαρό. Υπάρχουν αλγόριθμοι που υποστηρίζουν συμπίεση JPEG, περικοπή, διόρθωση γάμμα ή προς τα κάτω κλιμάκωση με κάποιο τρόπο. Είναι C, αλλά μπορώ λιμάνι να Python ή χρησιμοποιήστε Γ βιβλιοθήκες από την Python.

Ωστόσο, είναι από το 2001 και υποθέτω 7 ετών είναι εδώ και πολύ καιρό σε αυτό το πεδίο :( Πιστεύει κανείς να έχει κάποια παρόμοια και πιο πρόσφατα πράγματα;

Απαντήθηκε 04/09/2008 στις 20:06
πηγή χρήστη

ψήφοι
5

Χρησιμοποιώ τον ακόλουθο κώδικα. Απαιτεί PIL:

def reduceOpacity(im, opacity):
    """Returns an image with reduced opacity."""
    assert opacity >= 0 and opacity <= 1
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    else:
        im = im.copy()
    alpha = im.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im

def watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduceOpacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)

img = Image.open('/path/to/image/to/be/watermarked.jpg')

mark1 = Image.open('/path/to/watermark1.png')
mark2 = Image.open('/path/to/watermark2.png')

img = watermark(img, mark1, (img.size[0]-mark1.size[0]-5, img.size[1]-mark1.size[1]-5), 0.5)
img = watermark(img, mark2, 'scale', 0.01)

Το υδατογράφημα είναι πολύ αχνό για να δείτε. Μόνο μια σταθερή έγχρωμη εικόνα θα το δείξει πραγματικά. Μπορώ να το χρησιμοποιήσετε για να δημιουργήσετε μια εικόνα που δεν δείχνει ένα υδατογράφημα, αλλά αν το κάνω λίγο-από-bit αφαίρεση χρησιμοποιώντας την αρχική εικόνα, μπορώ να αποδείξει ότι υδατογράφημα μου είναι εκεί.

Αν θέλετε να δείτε πώς λειτουργεί, πηγαίνετε στο TylerGriffinPhotography.com . Κάθε εικόνα στην ιστοσελίδα είναι υδατόσημα δύο φορές: μία φορά με το υδατογράφημα στην κάτω δεξιά γωνία στο 50% αδιαφάνεια (5px από την άκρη), και μία φορά σε όλη την εικόνα σε 1% αδιαφάνειας (χρησιμοποιώντας «κλίμακα», η οποία κλιμακώνει το υδατογράφημα να η όλη εικόνα). Μπορείτε να καταλάβετε ποια είναι η δεύτερη, χαμηλή αδιαφάνεια σχήμα υδατογράφημα είναι;

Απαντήθηκε 05/09/2008 στις 05:32
πηγή χρήστη

ψήφοι
1

Λοιπόν, αόρατο υδατογράφηση δεν είναι τόσο εύκολο. Ελέγξτε Digimarc, τι χρήματα δεν κερδίζουν σε αυτό. Δεν υπάρχει δωρεάν C / Python κώδικα που μια μοναχική ιδιοφυΐα έχει γράψει μια άδεια είναι για δωρεάν χρήση. Έχω εφαρμοστεί το δικό μου αλγόριθμο και το όνομα του εργαλείου είναι SignMyImage. Google, αν σας ενδιαφέρει ... F>

Απαντήθηκε 12/02/2009 στις 14:16
πηγή χρήστη

ψήφοι
1

Υπάρχει μια νεότερη (2005) ψηφιακή υδατογράφηση Συχνές ερωτήσεις στους watermarkingworld.org

Απαντήθηκε 28/03/2009 στις 05:31
πηγή χρήστη

ψήφοι
2

Αν μιλάμε για στεγανογραφία , εδώ είναι μια παλιά δεν είναι και τόσο φανταχτερό μονάδα που έκανα για ένα φίλο φορά (Python 2.x κωδικό):

ο κώδικας

from __future__ import division

import math, os, array, random
import itertools as it
import Image as I
import sys

def encode(txtfn, imgfn):
    with open(txtfn, "rb") as ifp:
        txtdata= ifp.read()
    txtdata= txtdata.encode('zip')

    img= I.open(imgfn).convert("RGB")
    pixelcount= img.size[0]*img.size[1]
##  sys.stderr.write("image %dx%d\n" % img.size)

    factor= len(txtdata) / pixelcount
    width= int(math.ceil(img.size[0]*factor**.5))
    height= int(math.ceil(img.size[1]*factor**.5))

    pixelcount= width * height
    if pixelcount < len(txtdata): # just a sanity check
        sys.stderr.write("phase 2, %d bytes in %d pixels?\n" % (len(txtdata), pixelcount))
        sys.exit(1)
##  sys.stderr.write("%d bytes in %d pixels (%dx%d)\n" % (len(txtdata), pixelcount, width, height))
    img= img.resize( (width, height), I.ANTIALIAS)

    txtarr= array.array('B')
    txtarr.fromstring(txtdata)
    txtarr.extend(random.randrange(256) for x in xrange(len(txtdata) - pixelcount))

    newimg= img.copy()
    newimg.putdata([
        (
            r & 0xf8 |(c & 0xe0)>>5,
            g & 0xfc |(c & 0x18)>>3,
            b & 0xf8 |(c & 0x07),
        )
        for (r, g, b), c in it.izip(img.getdata(), txtarr)])
    newimg.save(os.path.splitext(imgfn)[0]+'.png', optimize=1, compression=9)

def decode(imgfn, txtfn):
    img= I.open(imgfn)
    with open(txtfn, 'wb') as ofp:
        arrdata= array.array('B',
            ((r & 0x7) << 5 | (g & 0x3) << 3 | (b & 0x7)
            for r, g, b in img.getdata())).tostring()
        findata= arrdata.decode('zip')
        ofp.write(findata)

if __name__ == "__main__":
    if sys.argv[1] == 'e':
        encode(sys.argv[2], sys.argv[3])
    elif sys.argv[1] == 'd':
        decode(sys.argv[2], sys.argv[3])

ο αλγόριθμος

Αποθηκεύει ένα byte δεδομένων ανά pixel εικόνας με τη χρήση: τα 3 λιγότερο σημαντικά bits του μπλε ζώνη, το 2 LSB του το πράσινο ενός και του 3 LSB του κόκκινου ένα.

κωδικοποιούν λειτουργίας: Ένα αρχείο κειμένου εισόδου συμπιέζεται από zlib, και η εικόνα εισόδου αλλάζει μέγεθος (διατήρηση αναλογιών) για να διασφαλιστεί ότι υπάρχουν τουλάχιστον τόσες pixels, ως συμπιεσμένο bytes. Ένα PNG εικόνα με το ίδιο όνομα με την εικόνα εισόδου (οπότε δεν χρησιμοποιούν «.png» όνομα αρχείου σαν είσοδο αν αφήσετε τον κωδικό ως έχει :) αποθηκεύεται περιέχει τα steganographic δεδομένων.

λειτουργία αποκωδικοποίηση: Τα προηγούμενα αποθηκευμένα δεδομένα zlib-συμπιεσμένα εξάγεται από την εικόνα εισόδου, και να αποθηκευτούν ασυμπίεστα κάτω από το όνομα του αρχείου που παρέχονται.

Θα επαληθευτεί η παλιά κώδικας τρέχει ακόμα, τόσο εδώ είναι ένα παράδειγμα της εικόνας που περιέχει steganographic στοιχεία:

περιέχει steganographic δεδομένα

Θα παρατηρήσετε ότι ο θόρυβος που προστίθεται είναι ελάχιστα ορατές.

Απαντήθηκε 31/10/2010 στις 17:03
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more