コード例 #1
0
 def dngWriter(self):
     nextbuf = self.wq.get()
     while nextbuf != None:
         try:
             index,target,dng = nextbuf
             ifd = dng.FULL_IFD
             if dng.ljpeg:
                 self.tc.put((dng.rawdata,ifd.width,ifd.length))
                 tile1 = bitunpack.pack16tolj(dng.rawdata,ifd.width,ifd.length/2,16,0,ifd.width/2,ifd.width/2,"")
                 #tile2 = bitunpack.pack16tolj(dng.rawdata,ifd.width,ifd.length/2,16,ifd.width,ifd.width/2,ifd.width/2,"")
                 self.tc.join() # Wait for it to be done
                 tile2 = self.nextCompressedTile
                 ifd._tiles = [
                     tile1,
                     tile2
                     ]
             else:
                 ifd._strips = [ dng.rawdata ]
             dng.writeFile(target+"_%06d.dng"%index)
             self.writtenFrame = index
         except:
             import traceback
             traceback.print_exc()
             self.cancel = True
         self.wq.task_done()
         time.sleep(0.016) # Yield
         nextbuf = self.wq.get()
     self.wq.task_done()
コード例 #2
0
 def tileCompress(self):
     tilejob = self.tc.get()
     while tilejob != None:
         try:
             rawdata,w,l = tilejob
             self.nextCompressedTile = bitunpack.pack16tolj(rawdata,w,l/2,16,w,w/2,w/2,"")
             self.tc.task_done()
         except:
             import traceback
             traceback.print_exc()
             self.nextCompressedTile = None
         tilejob = self.tc.get()
コード例 #3
0
def convert(input_file_name_jpeg, input_file_name_raw, width, length):
    dngTemplate = DNG()

    rawFrame, tags = process(input_file_name_jpeg, input_file_name_raw, width,
                             length, 16)
    for k, v in etags.items():
        etags[k] = tags[k]

    tile = bitunpack.pack16tolj(rawFrame, width * 2, length / 2, 10, 0, 0, 0,
                                "", 2)
    dngTemplate.ImageDataStrips.append(tile)

    # set up the FULL IFD
    mainIFD = dngIFD()
    mainTagStripOffset = dngTag(Tag.TileOffsets,
                                [0 for tile in dngTemplate.ImageDataStrips])
    mainIFD.tags.append(mainTagStripOffset)
    mainIFD.tags.append(dngTag(Tag.NewSubfileType, [0]))
    mainIFD.tags.append(
        dngTag(Tag.TileByteCounts,
               [len(tile) for tile in dngTemplate.ImageDataStrips]))
    mainIFD.tags.append(dngTag(Tag.ImageWidth, [width]))
    mainIFD.tags.append(dngTag(Tag.ImageLength, [length]))
    mainIFD.tags.append(dngTag(Tag.SamplesPerPixel, [1]))
    mainIFD.tags.append(dngTag(Tag.BitsPerSample, [10]))
    mainIFD.tags.append(dngTag(Tag.TileWidth, [width]))
    mainIFD.tags.append(dngTag(Tag.TileLength, [length]))
    mainIFD.tags.append(dngTag(Tag.Compression, [7]))
    mainIFD.tags.append(dngTag(Tag.PhotometricInterpretation, [32803]))
    mainIFD.tags.append(dngTag(Tag.CFARepeatPatternDim, [2, 2]))
    mainIFD.tags.append(dngTag(Tag.CFAPattern, [2, 1, 1, 0]))
    mainIFD.tags.append(dngTag(Tag.BlackLevel, [np.amin(rawFrame)]))
    mainIFD.tags.append(dngTag(Tag.WhiteLevel, [np.amax(rawFrame)]))
    mainIFD.tags.append(dngTag(Tag.Make, str(etags['Image Make'])))
    mainIFD.tags.append(dngTag(Tag.Model, str(etags['Image Model'])))
    mainIFD.tags.append(
        dngTag(Tag.ApertureValue, parseTag(etags['EXIF ApertureValue'])))
    mainIFD.tags.append(
        dngTag(Tag.ShutterSpeedValue,
               parseTag(etags['EXIF ShutterSpeedValue'])))
    mainIFD.tags.append(
        dngTag(Tag.FocalLength, parseTag(etags['EXIF FocalLength'])))
    mainIFD.tags.append(
        dngTag(Tag.ExposureTime, parseTag(etags['EXIF ExposureTime'])))
    mainIFD.tags.append(
        dngTag(Tag.DateTime, str(etags['EXIF DateTimeDigitized'])))
    mainIFD.tags.append(
        dngTag(Tag.PhotographicSensitivity,
               [int(str(etags['EXIF ISOSpeedRatings']))]))
    mainIFD.tags.append(dngTag(Tag.Software, "PyDNG"))
    mainIFD.tags.append(dngTag(Tag.Orientation, [1]))
    mainIFD.tags.append(dngTag(Tag.DNGVersion, [1, 4, 0, 0]))
    mainIFD.tags.append(dngTag(Tag.DNGBackwardVersion, [1, 2, 0, 0]))
    mainIFD.tags.append(dngTag(Tag.UniqueCameraModel, "RaspberryPi Camera V2"))
    mainIFD.tags.append(
        dngTag(Tag.ColorMatrix1,
               [[19549, 10000], [-7877, 10000], [-2582, 10000], [-5724, 10000],
                [10121, 10000], [1917, 10000], [-1267, 10000], [-110, 10000],
                [6621, 10000]]))
    mainIFD.tags.append(
        dngTag(Tag.ColorMatrix2,
               [[13244, 10000], [-5501, 10000], [-1248, 10000], [-1508, 10000],
                [9858, 10000], [1935, 10000], [-270, 10000], [-1083, 10000],
                [4366, 10000]]))
    mainIFD.tags.append(
        dngTag(Tag.AsShotNeutral,
               [[10043, 10000], [16090, 10000], [10000, 10000]]))
    mainIFD.tags.append(dngTag(Tag.NoiseProfile,
                               [0.000393625, 0.000000122976]))
    mainIFD.tags.append(dngTag(Tag.CalibrationIlluminant1, [1]))
    mainIFD.tags.append(dngTag(Tag.CalibrationIlluminant2, [23]))
    mainIFD.tags.append(dngTag(Tag.PreviewColorSpace, [2]))

    dngTemplate.IFDs.append(mainIFD)

    totalLength = dngTemplate.dataLen()
    # this must happen after dataLen is calculated! (dataLen caches the offsets)

    mainTagStripOffset.setValue(
        [k for offset, k in dngTemplate.StripOffsets.items()])

    buf = bytearray(totalLength)
    dngTemplate.setBuffer(buf)
    dngTemplate.write()

    outputDNG = input_file_name_jpeg.strip('.JPG') + '.dng'

    outfile = open(outputDNG, "wb")
    outfile.write(buf)
    outfile.close()
コード例 #4
0
ファイル: ml2dngljp.py プロジェクト: ethiccinema/mlrawviewer
def main():
    filename = sys.argv[1]
    r = MlRaw.loadRAWorMLV(filename)
    d = DNG.DNG()
    d.stripTotal = 3000000
    d.bo = "<"  # Little endian
    # Prepopulate DNG with basic set of tags for a single image
    ifd = DNG.DNG.IFD(d)
    d.ifds.append(ifd)
    d.FULL_IFD = ifd
    ifd.subFileType = 0  # Full
    ifd.width = r.width()
    ifd.length = r.height()
    e = ifd.entries
    at(e, DNG.Tag.NewSubfileType, 0)
    at(e, DNG.Tag.ImageWidth, r.width())
    at(e, DNG.Tag.ImageLength, r.height())
    at(e, DNG.Tag.BitsPerSample, 14)
    ifd.BitsPerSample = (14, )
    at(e, DNG.Tag.Compression, 1)  # No compression
    at(e, DNG.Tag.PhotometricInterpretation, 32803)  # CFA
    at(e, DNG.Tag.FillOrder, 1)
    atm(e, DNG.Tag.Make, "Canon")
    atm(e, DNG.Tag.Model, "EOS")
    ifd.TileWidth = r.width() / 2
    at(e, DNG.Tag.TileWidth, r.width() / 2)
    at(e, DNG.Tag.TileLength, r.height())
    atm(e, DNG.Tag.TileOffsets, (0, 0))
    atm(e, DNG.Tag.TileByteCounts, (0, 0))
    at(e, DNG.Tag.Orientation, 1)
    at(e, DNG.Tag.SamplesPerPixel, 1)
    #at(e,DNG.Tag.RowsPerStrip,r.height())
    #ifd.RowsPerStrip = r.height()
    #at(e,DNG.Tag.StripByteCounts,0)
    at(e, DNG.Tag.PlanarConfiguration, 1)  # Chunky
    atm(e, DNG.Tag.Software, "MlRawViewer")
    atm(e, DNG.Tag.CFARepeatPatternDim, (2, 2))  # No compression
    atm(e, DNG.Tag.CFAPattern, (0, 1, 1, 2))  # No compression
    at(e, DNG.Tag.Compression, 7)  # No compression
    atm(e, DNG.Tag.DNGVersion, (1, 4, 0, 0))
    atm(e, DNG.Tag.UniqueCameraModel, "Canon EOS")
    at(e, DNG.Tag.BlackLevel, r.black)
    at(e, DNG.Tag.WhiteLevel, r.white)
    atm(e, DNG.Tag.DefaultCropOrigin, (0, 0))
    atm(e, DNG.Tag.DefaultCropSize, (r.width(), r.height()))
    m = [(int(v * 10000), 10000) for v in r.colorMatrix.A1]
    atm(e, DNG.Tag.ColorMatrix1, m)
    atm(e, DNG.Tag.AsShotNeutral,
        ((473635, 1000000), (1000000, 1000000), (624000, 1000000)))
    at(e, DNG.Tag.FrameRate, (25000, 1000))
    import zlib, array

    minlevel = 2048
    delin = array.array('H', [0 for i in range(2**14)])
    for i in range(minlevel, 2048 + minlevel):
        delin[i] = i - minlevel
    for i in range(2048 + minlevel, 4096 + minlevel):
        delin[i] = 2048 + ((i - minlevel - 2048) >> 1)
    for i in range(4096 + minlevel, 8192 + minlevel):
        delin[i] = 3072 + ((i - minlevel - 4096) >> 3)
    for i in range(8192 + minlevel, 16384):
        delin[i] = 3584 + ((i - minlevel - 8192) >> 4)
    delin = delin.tostring()
    lin = array.array('H', [0 for i in range(2**12)])
    for i in range(2048):
        lin[i] = i + minlevel
    for i in range(2048, 3072):
        lin[i] = ((i - 2048) << 1) + minlevel + 2048
    for i in range(3072, 3584):
        lin[i] = ((i - 3072) << 3) + minlevel + 4096
    for i in range(3584, 4096):
        lin[i] = ((i - 3584) << 4) + minlevel + 8192
    lin = lin.tostring()

    for i in range(1, r.frames()):
        r.preloadFrame(i)
        f = r.frame(i)
        f.convert()
        #compressed = bitunpack.pack16tolj(f.rawimage,f.width*2,f.height/2,14,0,f.width,0,"")
        #tile1l = bitunpack.pack16tolj(f.rawimage,f.width,f.height/2,16,0,f.width/2,f.width/2,delin)
        #tile2l = bitunpack.pack16tolj(f.rawimage,f.width,f.height/2,16,f.width,f.width/2,f.width/2,delin)
        tile2 = bitunpack.pack16tolj(f.rawimage, f.width, f.height / 2, 16,
                                     f.width, f.width / 2, f.width / 2, "")
        tile1 = bitunpack.pack16tolj(f.rawimage, f.width, f.height / 2, 16, 0,
                                     f.width / 2, f.width / 2, "")
        print len(tile1), len(tile2), len(tile1) + len(tile2)
        #print len(tile1l),len(tile2l),len(tile1l)+len(tile2l)
        #image = array.array('H',"\0\0"*(f.width*f.height))
        #bitunpack.unpackljto16(buffer(compressed),image,0,f.width,0,"")
        #bitunpack.unpackljto16(str(tile1),image,0,f.width/2,f.width/2,"")
        #bitunpack.unpackljto16(str(tile2),image,f.width,f.width/2,f.width/2,"")
        """
        il = 256
        one = f.rawimage.tostring()
        two = image.tostring()
        if one != two:
            print "different!"
        orig = len(f.rawdata)
        comp = len(tile1)+len(tile2)
        compl = len(tile1l)+len(tile2l)
        print orig,comp,compl,float(comp)/float(orig),float(compl)/float(orig)
        """
        """
        fi = file("%d.raw"%i,'wb')
        fi.write(f.rawimage)
        fi.close()
        break
        """
        ifd._tiles = [tile1, tile2]
        d.writeFile(sys.argv[2] + "_%05d.dng" % i)