LINUX.ORG.RU

Что за тип png для splash logo? Как в такой конвертировать?

 , , ,


0

2

Хочу заменить splash logo, используется странный формат png: чёрный и белый не инвертированы, а жёлтый и синий, например, инвертированы. Пример: https://imgur.com/a/1rxB73g
Оригинал выглядит как-то так, если кто не в курсе: http://a1266.phobos.apple.com/us/r30/Purple6/v4/3d/9b/93/3d9b938c-20e9-cfc3-b...

Gimp показывает «Цвета RGB 8 bit, нелинейное целочисленное». Вообще, по описанию там применяется изображение RGB 32 bit (вроде бы). Я пробовал заливать картинку в 8бит и 24бит, но цвета всегда инвертированы и вместо синего на ней я получаю жёлтый, и наоборот.

Как правильно сохранить, чтобы отображало правильно? И куда в свежем гимпе делся выбор качества картинки при экспорте? Мне казалось, что присутствовало в диалоге сохранения файла, а теперь предлагает только выбрать один из множества форматов.

★★★★★

Я пробовал заливать картинку в 8бит и 24бит, но цвета всегда инвертированы и вместо синего на ней я получаю жёлтый, и наоборот.

Попробуй пользовать ppm. Netpbm всегда под рукой, да и graphicsmagick никто не отменял. Может результат изменится?

Deleted ()

Вообще не шарю во всей этой фигне, но когда я был маленьким в PCX формате был раздел для палитры.
Может в этом файле тоже своя палитра?

Deleted ()
Ответ на: комментарий от Deleted

Попробуй пользовать ppm. Netpbm всегда под рукой, да и graphicsmagick никто не отменял. Может результат изменится?

Так я не могу понять, в какие параметры мне надо конвертировать. По первой ссылке, была как раз картинка, которая на компе отображается синей, а на устройстве - корректно: жёлтой.

fehhner ★★★★★ ()
Ответ на: комментарий от Deleted

Не сработало. Посмотрел информацию при сборке, собирает через ffmpeg, конвертирует походу в bgr565:

ffmpeg -vcodec png -i src/splash/logo.png -vcodec rawvideo -f rawvideo -pix_fmt bgr565 -s 240x320 -y ./tmp.bin
ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20181127
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, png_pipe, from 'src/splash/logo.png':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 240x320, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[swscaler @ 0x55f52f8c4b00] full chroma interpolation for destination format 'bgr565le' not yet implemented
Output #0, rawvideo, to './tmp.bin':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Video: rawvideo (BGR[16] / 0x10524742), bgr565le, 240x320, q=2-31, 30720 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.35.100 rawvideo
frame=    1 fps=0.0 q=-0.0 Lsize=     150kB time=00:00:00.04 bitrate=30720.0kbits/s speed=1.77x    

fehhner ★★★★★ ()

Попробуй альфаканал добавить, просто прозрачный, мне кажется оно по дефолту считает что альфа там есть, а её там нет от того выборка пикселей неверная

Deleted ()
Ответ на: комментарий от Deleted

Всем спасибо. Мало ли кому пригодится, оставлю мой скрипт (собранный на коленке), которые свапает каналы в png:

pip install opencv-python
# import the necessary packages
import argparse
import cv2
 
def rgb2bgr_filter(image):
# by default, OpenCV uses BGR color scheme    
# split the image into its BGR components
   (B, G, R) = cv2.split(image)
	# merge the channels back together in reverse order and return the image
   return cv2.merge([R, G, B])

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="path to input image")
ap.add_argument("-o", "--output", required=True, help="path to output image with file extension, e.g. output.png")
args = vars(ap.parse_args())
 
# load the image, apply the reverse RGB filter, and show the
# output image
image = cv2.imread(args["image"])
filtered = rgb2bgr_filter(image)
cv2.imshow("Images", filtered)
cv2.imwrite(args["output"], filtered)
cv2.waitKey(0)
После него можно при конвертации в raw любой утилитой, получается bgr. Ну и в обратном порядке можно.

fehhner ★★★★★ ()
Последнее исправление: fehhner (всего исправлений: 4)
Ответ на: комментарий от fehhner

pip install opencv-python

???

$ cat gm-rgb2bgr.sh

#!/bin/sh

src="$1"

if [ -z "$src" ]
then
    echo "Usage: $0 file.png"
else
    gm convert "$src" -channel red "$src.red.png"
    gm convert "$src" -channel green "$src.green.png"
    gm convert "$src" -channel blue "$src.blue.png"

    gm composite -compose CopyRed "$src.blue.png" "$src.green.png" "$src.bgr.png"
    gm composite -compose CopyBlue "$src.red.png" "$src.bgr.png" "$src.bgr.png"

    rm -f "$src.red.png" "$src.green.png" "$src.blue.png"
fi
Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

Так то годно, всё равно лучше чем pip install opencv-python

У меня всё равно питонячья библиотека OpenCV установлена со времён, когда ковырял камеру на малине. Согласен, что это из пушки по воробьям такой мощной библиотекой цвета свайпать. С другой стороны, в итоге я успешно получил и прошил свой бут лого :)
А вообще, на похожем шаблоне можно разные фильтры делать

fehhner ★★★★★ ()