Как я получаю первый день недели для текущей локали? (PHP / L8N)

Есть несколько проблем с тем, что вы пытаетесь сделать здесь.

Изображения PIL имеют 8 бит на канал или 16 бит на канал (насколько мне известно). Когда вы загружаете JPEG, он загружается как 8 бит на канал, поэтому базовый тип данных представляет собой 8-разрядное целое число без знака, то есть диапазон 0..255. Операции, которые будут переполнять или пропускать этот диапазон, выглядят как поведение модуля, которое вы видите.

Вы можете преобразовать 8-битное изображение PIL в массив с плавающей запятой с помощью np.array(img).astype('float32'), а затем нормализовать его до 0..1, разделив на 255.

На данный момент у вас есть неквантованные числа с плавающей запятой, которые вы можете свободно искажать, как вам угодно.

Тем не менее, вам все равно нужно сохранить полученное изображение, после чего у вас снова возникает проблема с форматированием. Я полагаю, что файлы TIFF и некоторые форматы изображений HDR поддерживают данные с плавающей запятой, но если вы хотите что-то широко читаемое, вы, вероятно, предпочтете PNG или JPEG.

Для случая использования шифрования JPEG не является хорошим выбором, так как они всегда по своей природе с потерями, и вы, скорее всего, не получите обратно те же данные.

PNG могут иметь размер 8 или 16 бит на канал, но, тем не менее, у вас возникнет проблема сжатия практически бесконечного «динамического диапазона» пикселей (скажем, вы умножили все на тысячу!) В 0 ..255 или 0,65535.

Очевидный способ сделать это - найти максимальное значение на изображении (np.max(...)), разделить все на него (так что теперь вы вернулись к 0..1), а затем умножить на максимальное значение формат данных изображения ... так что с простым умножением «шифр», как вы описали, вы по сути получите то же изображение обратно.

Другим способом было бы обрезать бесконечный диапазон при допустимых значениях, то есть все, что ниже нуля, равно нулю, все, что выше него, скажем, 65535. Хотя это было бы операцией с потерями, и у вас не было бы никакого способа возвращение незафиксированных значений.

5
задан Kate Gregory 4 February 2013 в 03:13
поделиться

2 ответа

От дополнительных данных CLDR:

<firstDay day="mon" territories="001 AD AI AL AM AN AT AX AZ BA BE BG BM BN BY CH CL CM CR CY CZ DE DK EC EE ES FI FJ FO FR GB GE GF GP GR HR HU IS IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY NL NO PL PT RE RO RS RU SE SI SK SM TJ TM TR UA UY UZ VA VN XK" />
<firstDay day="fri" territories="BD MV" />
<firstDay day="sat" territories="AE AF BH DJ DZ EG IQ IR JO KW LY MA OM QA SD SY" />
<firstDay day="sun" territories="AG AR AS AU BR BS BT BW BZ CA CN CO DM DO ET GT GU HK HN ID IE IL IN JM JP KE KH KR LA MH MM MO MT MX MZ NI NP NZ PA PE PH PK PR PY SA SG SV TH TN TT TW UM US VE VI WS YE ZA ZW" />
<firstDay day="sun" territories="GB" alt="variant" references="Shorter Oxford Dictionary (5th edition, 2002)" />

(Территория 001 является "Миром"),

11
ответ дан 18 December 2019 в 12:02
поделиться

Выполните эту команду в оболочке (bash, sh или т. Д.):

locale first_weekday

В PHP вызовите процесс для запуска этой команды в sh и получите ее вывод. В Python я делаю примерно следующее:

def getLocaleFirstWeekDay():
  return int(os.popen('locale first_weekday').read())-1
4
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: