возможно ли в параметрах задать выходной файл не PNG а JPG

Ответить
Nikolka00
Активный участник
Сообщения: 101
Зарегистрирован: 01 авг 2010, 23:34
Репутация: 2

возможно ли в параметрах задать выходной файл не PNG а JPG

Сообщение Nikolka00 » 07 ноя 2012, 18:09

не хотелось бы создавать новый топик. раз уж речь идет о скрипте gdal2tiles
возможно ли в параметрах задать выходной файл не PNG а JPG ? и компрессию (качество картинки)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: возможно ли в параметрах задать выходной файл не PNG а J

Сообщение Максим Дубинин » 07 ноя 2012, 21:08

вроде был патч про это, но насколько я понял, автор пока его не доработал до состояния когда его можно применить

подробности у Bishop

PS: пожалуйста, не надо отвечать с вопросом про ПО Х в первой попавшейся теме про ПО Х
пристегивайтесь, турбулентность прямо по курсу

Nikolka00
Активный участник
Сообщения: 101
Зарегистрирован: 01 авг 2010, 23:34
Репутация: 2

Re: возможно ли в параметрах задать выходной файл не PNG а J

Сообщение Nikolka00 » 08 ноя 2012, 14:47

погуглил) не думал что найду патч ) дабы информация не потерялась, скопипастю)
http://www.openstreetmap.org/user/Xmygdal2tiles с поддержкой jpeg
Спойлер
Как любителя нарезать большие картинки на тайлы, с момента появления статьи про OrbView-3 меня волновал вопрос - когда научат gdal2tiles сохранять тайлы в JPEG? И насколько меньше места будут занимать тайлы?

Сегодня получил патч от PShA и получил такие цифры:
Для теста взял GeoTIFF размером 15594х10931 px, 487 МБ (511 461 868 байт), который нарезал для 5 зума.

# По умолчанию режет в формате PNG - всё как обычно
$gdal2tiles -w none -n -z 5 test.tif tiles
размер папки: 1.49 МБ (1 564 650 байт)

# Параметр "-f jpg" даст нам тайлы с расширением .jpg
# по умолчанию в GDAL для JPEG стоит QUALITY = 75
gdal2tiles -f jpg -w none -n -z 5 test.tif tiles
размер папки: 402 КБ (411 703 байт)

# выставляем QUALITY = 90
gdal2tiles -q 90 -f jpg -w none -n -z 5 test.tif tiles
размер папки: 608 КБ (622 967 байт)

# Получаем файлы с расширением .jpeg и QUALITY = 95
gdal2tiles -q 95 -f jpeg -w none -n -z 5 test.tif tiles
размер папки: 810 КБ (829 693 байт)

в реальной ситуации снимки режутся для 16-19 зума, но это ооочень долго и больше места займет.

P.S. Спасибо и багрепорты отсылаем PShA , которого проще поймать в чатике про аниме ;)
http://psha.org.ru/cgit/psha/gdal/diff/ ... y?h=single
Спойлер

Код: Выделить всё

diff --git a/swig/python/scripts/gdal2tiles.py b/swig/python/scripts/gdal2tiles.py
index 9017e6e..49f0bbd 100755
--- a/swig/python/scripts/gdal2tiles.py
+++ b/swig/python/scripts/gdal2tiles.py
@@ -512,6 +512,8 @@ class GDAL2Tiles(object):
self.tilesize = 256
self.tiledriver = 'PNG'
self.tileext = 'png'
+ self.has_alpha = True
+ self.drv_options = []
# Should we read bigger window of the input raster and scale it down?
# Note: Modified leter by open_input()
@@ -544,6 +546,16 @@ class GDAL2Tiles(object):
except:
self.error("This version of GDAL is not supported. Please upgrade to 1.6+.")
#,"You can try run crippled version of gdal2tiles with parameters: -v -r 'near'")
+
+ self.tileext = self.options.format
+
+ if self.tileext in ('jpg', 'jpeg'):
+ self.tiledriver = 'JPEG'
+ if self.options.quality:
+ self.drv_options.append("QUALITY=%s" % (self.options.quality))
+ else:
+ self.tiledriver = self.tileext.upper()
+ self.has_alpha = self.tiledriver != 'JPEG'
# Is output directory the last argument?
@@ -655,6 +667,10 @@ gdal_vrtmerge.py -o merged.vrt %s""" % " ".join(self.args))
help="Resume mode. Generate only missing files.")
p.add_option('-a', '--srcnodata', dest="srcnodata", metavar="NODATA",
help="NODATA transparency value to assign to the input data")
+ p.add_option("-f", "--format", dest='format', default='png', choices=['png', 'jpeg', 'jpg'],
+ help="Image format")
+ p.add_option("-q", "--quality", dest='quality',
+ help="Values must be in the range 10-100 (default the quality flag is set to 75)")
p.add_option("-v", "--verbose",
action="store_true", dest="verbose",
help="Print status messages to stdout")
@@ -1164,7 +1180,9 @@ gdal2tiles temp.vrt""" % self.input )
#tmaxy = tminy
ds = self.out_ds
- tilebands = self.dataBandsCount + 1
+ tilebands = self.dataBandsCount
+ if self.has_alpha:
+ tilebands += 1
querysize = self.querysize
if self.options.verbose:
@@ -1262,7 +1280,8 @@ gdal2tiles temp.vrt""" % self.input )
if self.tilesize == querysize:
# Use the ReadRaster result directly in tiles ('nearest neighbour' query)
dstile.WriteRaster(wx, wy, wxsize, wysize, data, band_list=list(range(1,self.dataBandsCount+1)))
- dstile.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
+ if self.has_alpha:
+ dstile.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
# Note: For source drivers based on WaveLet compression (JPEG2000, ECW, MrSID)
# the ReadRaster function returns high-quality raster (not ugly nearest neighbour)
@@ -1274,7 +1293,8 @@ gdal2tiles temp.vrt""" % self.input )
#for i in range(1, tilebands+1):
# dsquery.GetRasterBand(1).Fill(tilenodata)
dsquery.WriteRaster(wx, wy, wxsize, wysize, data, band_list=list(range(1,self.dataBandsCount+1)))
- dsquery.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
+ if self.has_alpha:
+ dsquery.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
self.scale_query_to_tile(dsquery, dstile, tilefilename)
del dsquery
@@ -1283,7 +1303,7 @@ gdal2tiles temp.vrt""" % self.input )
if self.options.resampling != 'antialias':
# Write a copy of tile to png/jpg
- self.out_drv.CreateCopy(tilefilename, dstile, strict=0)
+ self.out_drv.CreateCopy(tilefilename, dstile, strict=0, options=self.drv_options)
del dstile
@@ -1304,7 +1324,9 @@ gdal2tiles temp.vrt""" % self.input )
print("Generating Overview Tiles:")
- tilebands = self.dataBandsCount + 1
+ tilebands = self.dataBandsCount
+ if self.has_alpha:
+ tilebands += 1
# Usage of existing tiles: from 4 underlying tiles generate one as overview.
@@ -1378,7 +1400,7 @@ gdal2tiles temp.vrt""" % self.input )
# Write a copy of tile to png/jpg
if self.options.resampling != 'antialias':
# Write a copy of tile to png/jpg
- self.out_drv.CreateCopy(tilefilename, dstile, strict=0)
+ self.out_drv.CreateCopy(tilefilename, dstile, strict=0, options=self.drv_options)
if self.options.verbose:
print("\tbuild from zoom", tz+1," tiles:", (2*tx, 2*ty), (2*tx+1, 2*ty),(2*tx, 2*ty+1), (2*tx+1, 2*ty+1))
спойлер не работает?

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: возможно ли в параметрах задать выходной файл не PNG а J

Сообщение Максим Дубинин » 08 ноя 2012, 15:58

вы читали то что вам выше написал? зачем вы опять выложили этот патч, он уже есть у коммитера.

еще раз: автор пока его не доработал до состояния когда его можно применить. Ему написали, он не ответил.

PS: в спойлере обязательно надо писать что-то после =
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: возможно ли в параметрах задать выходной файл не PNG а J

Сообщение Дмитрий Барышников » 08 ноя 2012, 16:05

Для того что бы внести патч в GDAL необходимо:
1) Внести исправление в версию gdal2tiles.py в транке (транк уже ушел вперед и необходимо убедится что на него накладывается патч) (https://svn.osgeo.org/gdal/trunk/gdal/s ... l2tiles.py)
2) Внести изменения в документацию по gdal2tiles.py в транке (https://svn.osgeo.org/gdal/trunk/gdal/a ... lities.dox)
3) Сделать патч для этих двух (или более файлов, если они тоже затрагиваются изменениями) и опубликовать его в виде тикета http://trac.osgeo.org/gdal/ , например, как это было сделано здесь (http://trac.osgeo.org/gdal/ticket/4742 ).

В GDAL Вопросами биндинга в питон занимается hobu. Если у него будут замечания, необходимо будет их учесть. Необходимо учесть, что если патч не только добавляет новый функционал, но и меняет существующий, то нужно обосновать эти изменения в виду того, что текущая версия используется во многих скриптах, которые после обновления могут поломаться.

Nikolka00
Активный участник
Сообщения: 101
Зарегистрирован: 01 авг 2010, 23:34
Репутация: 2

Re: возможно ли в параметрах задать выходной файл не PNG а J

Сообщение Nikolka00 » 08 ноя 2012, 16:09

Максим Дубинин писал(а):вы читали то что вам выше написал? зачем вы опять выложили этот патч, он уже есть у коммитера.
кто ж знал что это одни и те же люди. я ток инфу подкинул
сорри, за не преднамеренный флуд.

п.с. скрипт работает!
Максим Дубинин писал(а): PS: в спойлере обязательно надо писать что-то после =
по дефолту может стоит написать "СПОЙЛЕР" ?

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей