Файл, которым вы поделились в filebin, содержит «альфа» маску, как вы можете видеть в выводе gdalinfo
. Маска этого файла говорит о том, что фон замаскирован, а остальная часть изображения - нет.
Если вы, например, отображаете tiff в программе просмотра Ubuntu по умолчанию, вы можете видеть, что пиксели фона замаскированы out (они отображаются в виде контрольной панели)
Если вы просматриваете растровые данные, вы также видите, что нижележащие пиксели на фоне черные, а не белые. Вот почему gdal_translate
создает jpeg с черными пикселями на заднем плане, потому что они действительно черные (но замаскированы) в исходном файле TIFF.
Если вы абсолютно хотите, чтобы фон был белым, Вы можете сделать это с помощью нескольких строк Python, используя, например, библиотеку rasterio
, явно установив маскированные пиксели на белый:
import rasterio
with rasterio.open("101679_1.tif") as src:
arr = src.read(masked=True)
# Convert all masked values to white
arr[arr.mask] = 255
# Write to jpeg file
profile = src.profile
profile["count"] = 3
profile["driver"] = "jpeg"
with rasterio.open("test.jpeg", "w", **profile) as dst:
dst.write(arr[:3])
Это должно дать следующее jpeg-файл:
Фрагмент кода, который я включил выше, также будет работать с файлами TIF, которые уже имеют белый фон, потому что строка arr[arr.mask] = 255
не будет ничего делать, если файл не содержит маски. Чтобы обработать каталог, полный .tif
файлов, вы можете сделать:
from glob import glob
import rasterio
for tif in glob("*.tif"):
with rasterio.open(tif) as src:
arr = src.read(masked=True)
# Convert all masked values to white
arr[arr.mask] = 255
# Write to jpeg file
profile = src.profile
profile["count"] = 3
profile["driver"] = "jpeg"
with rasterio.open(tif.replace(".tif", ".jpeg"), "w", **profile) as dst:
dst.write(arr[:3])