Так что просто мой ответ на случай, если это кому-то понадобится: Я нашел методы, которые мне понравились:
- Blob Data
Это означает, что данные преобразуются в двоичные данные, а затем помещаются в mysql -table
Затем его можно извлечь из этой таблицы и прочитать с помощью python gdal Код выглядит так:
def convert_to_binary_data(self, filename):
# Convert digital data to binary format
with open(filename, 'rb') as file:
blobData = file.read()
return blobData
def insert_image(self, photo_path, name, table_name, id):
binary_photo = self.convert_to_binary_data(photo_path)
insert_blob_query = "INSERT INTO {} (id, name, photo) VALUES ('{}','{}',COMPRESS({}))".format(table_name, id,
name,
str(
base64.b64encode(
binary_photo))[
1:])
self.connection.execute(insert_blob_query)
def read_blob_data_by_id(self, id, table_name, path):
sql_fetch_blob_query_data = "SELECT (UNCOMPRESS(photo)) from {} where id = '{}'".format(table_name, id)
sql_fetch_blob_query_name = "SELECT (name) from {} where id = '{}'".format(table_name, id)
result = self.connection.execute(sql_fetch_blob_query_data)
name = self.connection.execute(sql_fetch_blob_query_name)
for n in name:
nam = n[0]
for row in result:
photo
= base64.b64decode (row [0]) file_like = io.BytesIO (photo) img = Image.open (file_like) img.save (path + '\' + нам + '.jpg')
Чтение в массив
- второй метод работает с numpy массивом
- массив numpy считывается, а затем сохраняется в таблицу
- затем его можно извлечь и преобразовать обратно в файл tif
- тогда потребуется дополнительная информация lioke pixelx, pixelsy ...
Код выглядит следующим образом :
def array_to_raster(self, geotransform, array, newRasterfn, desc=None,
default_no_data=-99999, dtype=gdal.GDT_Float32):
# converting array to raster and then exporting it into a file
# reading in single value of geo settings
if desc is None:
desc = {'AREA_OR_POINT': 'Area', 'DataType': 'Generic'}
pixelWidth = geotransform[1]
pixelHeight = geotransform[5]
# getting shape
cols = array.shape[1]
rows = array.shape[0]
# getting origin
originX = geotransform[0]
originY = geotransform[3]
# getting driver for file
driver = gdal.GetDriverByName('GTiff')
# creating file
outRaster = driver.Create(newRasterfn, cols, rows, 1, dtype)
# setting geo settings in file
outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
# setting band data
outband = outRaster.GetRasterBand(1)
# setting no data normal -99999
outband.SetNoDataValue(default_no_data)
# writing the array in data
outband.WriteArray(array)
# export settings
outRasterSRS = osr.SpatialReference()
outRasterSRS.ImportFromEPSG(25832)
outRaster.SetProjection(outRasterSRS.ExportToWkt())
# setting metadata
outRaster.SetMetadata(desc)
# clearing flush
outband.FlushCache()
# retuning value
return outRaster