Gif расшифровка: Что такое GIF? | Глоссарий терминов Интернет-маркетинга

Формат изображений PNG, JPG, GIF, BMP и TIF — Userello

Что интересного в этой статье:

  1. Краткий анализ графических форматов файлов
  2. Растр против вектора
  3. Сжатие файлов
  4. Формат JPG / JPEG
  5. Формат TIFF
  6. Формат GIF
  7. Формат изображений BMP
  8. Видео о разных графических форматах: JPEG, TIFF, GIF и BMP

Мы все загружаем изображения, создаем фото, делаем «мемы», чтобы делиться ими в социальных сетях. Многие постят изображения даже не задумываясь над тем а какой формат графического файла подходит для конкретного случая больше всего. Данная статья не касается профессионалов растровой и векторной графики. Остальным же этот краткий анализ графических форматов будет не лишним, чтобы лучше понимать для каких целей использовать тот или иной формат. Итак, начнём.

Краткий анализ графических форматов файлов

  1. JPG / JPEG / JFIF
  2. PNG
  3. TIF / TIFF
  4. GIF
  5. BMP

Растр против вектора

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

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

Сжатие файлов

Кроме того, форматы файлов изображений можно различать на основе эффектов сжатия, называемых компрессией. Разновидностей схем сжатия достаточно большое количество, но суть их существования можно свести в одну задачу — сжать растровый файл как можно эффективней. Сжимать графический файл нет смысла, так как его размер зависит не от масштаба, а от количества путей в нём.

Компрессия может очень эффективно сжимать изображения буквально в два и более раза. Но при это почти всегда происходит потеря в качестве, так как основной алгоритм компрессии — выделить несколько пикселей и заменить их одним или двумя похожими по оттенку. Компрессионный файл никогда не будет точным представлением оригинала, за некоторым исключением. Поговорим об этом дальше. Сжатие файлов обычно подходит для небольших фотографий и не подходит для проф. рисунков или качественных иллюстраций, презентаций.

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

Формат JPG / JPEG

Аббревиатура от: Joint Photographic Experts Group — Объединённая группа экспертов по фотографиям.

Расширения файлов: .jpg / .jpeg

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

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

Применяемость: непрозрачные изображения, устройства захвата изображений (гаджеты, фотокамеры, экш-камеры).

Формат TIFF

Аббревиатура от: Tagged Image File Format — формат для хранения растровых графических изображений.

Расширение файлов: .tif / .tiff

Гибкий и легко расширяемый формат файла, способный сохранять файлы с большой глубиной цвета. Эти файлы имеют прозрачный фон. Они идеально подходят для логотипов компании.

Минусы: Не идеальны для веб-браузеров.

Применяемость: Начальный этап фотографических файлов в печати. Программные пакеты OCR.

Аббревиатура от: Graphics Interchange Format — формат для обмена изображениями.

Ещё полезные работы по работе с файлами:

Как сжать PDF файл: 4 бесплатных инструмента

Формат GIF

Расширение файлов: .gif

Хотя GIF имеет низкую степень сжатия по сравнению с большинством видеоформатов, этот формат наиболее популярен среди пользователей для анимации изображений.

Минусы: формат ограничен 8-битной палитрой (256 цветов) и не подходит для фотографических изображений или сглаживания.

Применяемость: Графика, которая требует нескольких цветов, например упрощенные диаграммы, логотипы и анимации, которые состоят на более чем 50% из одного цвета.

Ещё о формате GIF-изображений на userello:

👉 Подборка лучших онлайн-сервисов для создания анимированных GIF

👉 Как остановить автоматическое проигрывание GIF-файлов

Формат изображений BMP

Аббревиатура от: Bitmap Picture — дословно формат для хранения растровых изображений

Расширение файлов: .bmp

Этот формат разработан компанией Microsoft и предназначен для хранения больших несжатых файлов внутри ОС Windows.

Минусы: этот формат не использует сжатие.

Применяемость: упрощенная структура формата делает файлы bmp идеальными для программ Windows.

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

Видео о разных графических форматах: JPEG, TIFF, GIF и BMP

Кабель СБ2лШв 6 кВ — Цена, Расшифровка, Характеристики и все Сечения

Кабель СБ2лШв 6 кВ — Цена, Расшифровка, Характеристики и все Сечения — 6 кВ

Где купить

Номинальное переменное напряжение6 кВ
Количество жил3
Сечение размер10 — 240 мм2

Содержание:

  • Расшифровка
  • Технические
    характеристики
  • Конструкция
  • Применение
  • Маркировка
  • Сечения
    и маркоразмеры
  • ГОСТ
  • Аналоги
  • Производители

Расшифровка СБ2лШв

*

— отсутствие буквы А означает, что токопроводящая жила — медная

С

— свинцовая оболочка;

Б

— броня из стальных оцинкованных лент

— 2 слоя из полиэтилентерефталатных лент в подушке под броней;

Шв

— выпрессованный ПВХ защитный шланг

СБ2лШв — тропическое исполнение (стойкость к воздействию плесневых грибов)

СБ2лШвУ — в настоящее время, буква «у» не используется. Была введена изменением № 3 в ГОСТ 18410-73, для обозначения ТПЖ с повышенной температурой нагрева. После перехода предприятий к выпуску усовершенствованных кабелей, буква «у» была исключена.

ож — однопроволочная жила

ок — однопроволочная круглая жила

ос — однопроволочная секторная жила

мж,мп,мн — многопроволочная жила

мк — многопроволочная круглая жила

мс — многопроволочная секторная жила

Технические характеристики СБ2лШв

Общие характеристики

Номинальное переменное напряжение

6 кВ

Номинальная частота

50 Гц

Минимально допустимый радиус изгиба при прокладке

15 диаметров кабеля (для одножильного кабеля)
15 диаметров кабеля (для многожильного кабеля)

Строительная длина

метров

Код ОКП СБ2лШв

3531130900

Класс пожарной безопасности

O1.8.2.5.4

Срок службы

30 лет

Гарантийный срок эксплуатации кабеля

4,5 лет

Температура окружающей среды при эксплуатации кабеля

от -50°С до 50°С

Стойкость к воздействию повышенной относительной влажности при температуре окружающей среды до 35°C

98%

Минимальная температура прокладки кабеля без предварительного подогрева

0 °С

Радиус изгиба

Допустимые температуры нагрева токопроводящих жил кабеля:

Длительно-допустимая

80/65* °С

В режиме перегрузки

105/90* °С

Предельная при коротком замыкании

200 °С

Конструкция СБ2лШв

  1. 1. Медная токопроводящая жила
  2. 2. Фазная бумажная изоляция, пропитанная вязким изоляционным пропиточным составом
  3. 3. Заполнение из бумажных жгутов
  4. 4. Поясная бумажная изоляция, пропитанная вязким изоляционным пропиточным составом
  5. 5. Экран из электропроводящей бумаги
  6. 6. Свинцовая оболочка
  7. 7. Подушка:
    • битумный состав или битум;
    • ленты полиэтилентерефталатные;
    • крепированная бумага или кабельная пропитанная;
    • битумный состав или битум;
    • ленты полиэтилентерефталатные;
    • крепированная бумага или кабельная пропитанная;
    • битумный состав или битум.
  8. 8. Броня из стальных оцинкованных лент
  9. 9. Наружный покров:
    • битумный состав, вязкий подклеивающий состав или битум
    • лента поливинилхлоридная, полиэтилентерефталатная или другая равноценная
  10. 10. Защитный шланг из ПВХ пластиката

Токопроводящие жилы должны быть одно- или многопроволочными номинальными сечениями в соответствии с таблицей:

Наименование жилыНоминальное сечение медной жилы, мм
круглойсекторной (сегментной)
Однопроволочная6-5025-50
Многопроволочная25-5025-400

Номинальное сечение нулевых жил меньшего сечения должно соответствовать указанному:

Наименование жилыНоминальное сечение медной жилы, мм
Основная2535507095120
150
185240
Нулевая или заземления1616253550707095120

Маркировка СБ2лШв

Маркировка расцветкой должна быть устойчивой, нестираемой и различимой. Маркировка должна производиться при помощи цветных лент на жилах или лент натурального цвета с полосками, отличающимися друг от друга по цвету. Маркировка цифрами производится печатанием или тиснением и должна быть отчетливой. Цвет цифр при маркировке печатанием должен отличаться от цвета изоляции жилы. Цифры должны иметь одинаковый цвет. Изоляция жилы меньшего сечения (нулевой) может быть любого цвета и может не иметь цифрового обозначения. Цвет изоляции жил должен соответствовать ГОСТ 18410-73. При обозначении изолированных жил цифрами расстояние между ними не должно быть более 35 мм.

Применение СБ2лШв

  • Кабели предназначены для передачи и распределения электрической энергии в стационарных установках в электрических сетях на номинальное напряжение 6 кВ номинальной частотой 50 Гц
  • Допускается разность уровней между высшей и низшей точками расположения кабеля не более 15 м
  • Для прокладки в сырых, частично затапливаемых помещениях и каналах, на эстакадах, в шахтах в среде со средней и высокой коррозионной активностью
  • Для одиночной прокладки в кабельных сооружениях и производственных помещениях. Групповая прокладка разрешается только в наружных электроустановках и производственных помещениях, где возможно лишь периодическое присутствие обслуживающего персонала, при этом необходимо применять пассивную огнезащиту
  • Применяются при наличии опасности механических повреждений кабеля

Сечения и маркоразмеры СБ2лШв

Выбрав необходимый размер кабеля СБ2лШв, вы сможете уточнить значения и описание следующих характеристик:

  • вес и диаметр
  • токовая нагрузка
  • ток короткого замыкания
  • мощность
  • сопротивление
  • точная конструкция
  • маркировка
  • СБ2лШв 3х10
  • СБ2лШв 3х16
  • СБ2лШв 3х25
  • СБ2лШв 3х35
  • СБ2лШв 3х50
  • СБ2лШв 3х70
  • СБ2лШв 3х95
  • СБ2лШв 3х120
  • СБ2лШв 3х150
  • СБ2лШв 3х185
  • СБ2лШв 3х240

ГОСТ СБ2лШв

Ниже представлены государственные стандарты для СБ2лШв, в соответствии с которыми мы собрали технические характеристики, представленные на данной странице.

ГОСТ 18410-73

действующий

«ГОСТ 18410-73 Кабели силовые с пропитанной бумажной изоляцией. Технические условия»

с 01.01.1975 по н.в.

скачать

Так же смотрите

ГОСТ 22483-2012

действующий

«Жилы токопроводящие для кабелей, проводов и шнуров»

с 01.01.2014 по н.в.

скачать

ГОСТ 24641-81

действующий

«Оболочки кабельные свинцовые и алюминиевые. Технические условия. »

с 01.01.1975 по н.в.

скачать

ГОСТ 7006-72

действующий

«Покровы защитные кабелей»

с 01.01.1975 по н.в.

скачать

ГОСТ 15150-69

действующий

«Исполнения для различных климатических районов»

с 01.01.1971 по н.в.

скачать

Аналоги СБ2лШв

СБШв

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

СБлШв

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

ЦСБШв

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, защитным шлангом из ПВХ. Напряжение 6 кВ.

ЦСБлШв

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, защитным шлангом из ПВХ. Напряжение 6 кВ.

СБВнг(А)-LS

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией, свинцовой оболочкой, наружней оболочкой из ПВХ пониженной пожарной опасности. Напряжение 6 кВ.

ЦСБВнг(А)-LS

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, наружней оболочкой из ПВХ пониженной пожарной опасности. Напряжение 6 кВ.

СБнлШнг

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

ЦСБнлШнг

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, защитным шлангом из ПВХ пониженной горючести. Напряжение 6 кВ.

ЦСБ2лШв

бронированный лентами кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, защитным шлангом из ПВХ. Напряжение 6 кВ.

Заводы-производители СБ2лШв

ООО «Сарансккабель»

НАО «Иркутсккабель»

ООО «Камский Кабель»

Ваша заявка на кабель СБ2лШв — 6кВ успешно отправлена. С вами свяжутся в ближайшее время!

Представьтесь, пожалуйста:

E-Mail:

Телефон:

Необходимое количество:

Сообщение (при необходимости):

Авторизация Регистрация Забыли пароль?

Пакет

gif — image/gif — Go Packages

Пакет gif реализует декодер и кодировщик изображений GIF.

Спецификация GIF находится по адресу https://www.w3.org/Graphics/GIF/spec-gif89a.txt.

  • Константы
  • func Decode(r io.Reader) (image.Image, ошибка)
  • func DecodeConfig(r io.Reader) (image.Config, ошибка)
  • func Encode(w io.Writer, m image.Image, o *Options) ошибка
  • func EncodeAll(w io.Writer, g *GIF) ошибка
  • тип GIF
    • func DecodeAll(r io.Reader) (*GIF, ошибка)
  • тип Опции
Просмотр исходного кода

 константа (
УдалениеНет = 0x01
DisposalBackground = 0x02
УтилизацияПредыдущий = 0x03
) 

Методы утилизации.

Этот раздел пуст.

 func Decode(r io.Reader) (image.Image, ошибка) 

Decode читает изображение GIF из r и возвращает первое внедренное изображение как изображение. Изображение.

 func DecodeConfig(r io.Reader) (image.Config, ошибка) 

DecodeConfig возвращает глобальную цветовую модель и размеры изображения GIF без декодирования всего изображения.

 func Encode(w io.Writer, m image.Image, o *Options) ошибка 

Encode записывает изображение m в w в формате GIF.

 func EncodeAll(w io.Writer, g *GIF) ошибка 

EncodeAll записывает изображения из g в w в формате GIF с заданное количество циклов и задержка между кадрами.

 тип структуры GIF {
Image []*image.Paletted // Последовательные изображения.
Delay []int // Последовательное время задержки, по одному на кадр, в сотых долях секунды.
// LoopCount контролирует, сколько раз анимация будет
// перезапуск во время отображения.
// Значение LoopCount, равное 0, означает зацикливание навсегда.
// Значение LoopCount, равное -1, означает показ каждого кадра только один раз.
// В противном случае анимация зацикливается LoopCount+1 раз.
LoopCount целое число
// Удаление — это последовательные методы удаления, по одному на кадр. Для
// обратная совместимость, nil Disposal допустим для передачи в EncodeAll,
// и подразумевает, что метод удаления каждого фрейма равен 0 (без удаления
// указано). 
Удаление [] байт
// Конфиг — это глобальная таблица цветов (палитра), ширина и высота. ноль или
// empty-color.Palette Config.ColorModel означает, что каждый кадр имеет свой
// таблица цветов, а глобальной таблицы цветов нет. Границы каждого кадра должны
// находиться внутри прямоугольника, определяемого двумя точками (0, 0) и
// (Конфигурация.Ширина, Конфиг.Высота).
//
// Для обратной совместимости можно передать Config с нулевым значением
// EncodeAll и подразумевает, что общая ширина и высота GIF равны
// граница первого кадра Rectangle.Max point.
Изображение конфигурации.Config
// BackgroundIndex — индекс фона в глобальной таблице цветов, для
// использовать с методом удаления DisposalBackground.
Байт BackgroundIndex
} 

GIF представляет возможно несколько изображений, хранящихся в файле GIF.

 func DecodeAll(r io.Reader) (*GIF, ошибка) 

DecodeAll считывает изображение GIF из r и возвращает последовательные кадры и информацию о времени.

 тип Опции struct {
// NumColors — максимальное количество цветов, используемых в изображении. 
// Диапазон значений от 1 до 256.
NumColors целое
// Квантизатор используется для создания палитры размером NumColors.
// палитра.Plan9 используется вместо нулевого Quantizer.
Quantizer Draw.Quantizer
// Drawer используется для преобразования исходного изображения в нужную палитру.
// draw.FloydSteinberg используется вместо nil Drawer.
Выдвижной ящик. Ящик
} 

Опции — это параметры кодирования.

Как декодировать base64 в GIF в python?

Задавать вопрос

спросил

Изменено 1 год, 11 месяцев назад

Просмотрено 866 раз

У меня есть API-интерфейс python flask-restful, я пытаюсь добавить функцию, позволяющую пользователям загружать GIF-файлы, для этого клиент будет загружать GIF-файл в кодировке base64 в API, поэтому в API мне нужно иметь возможность декодировать base64 в GIF, а также иметь возможность выполнять над ним операции, такие как изменение размера и сжатие, а затем преобразовывать его в байты

Я пытался сделать с PIL следующим образом:

 img_bytes = BytesIO()
# Я указал продолжительность 67, потому что хочу, чтобы GIF воспроизводился со скоростью 15 кадров в секунду, 1000/15 = 66,66
self. image.save(img_bytes, append_images=self.frames[1:], format=self.format, save_all=True,
                оптимизировать = ложь, продолжительность = 67, цикл = 0)
img_bytes.seek(0)
 

Проблема с этой реализацией заключается в том, что я нахожу много искажений и черных пикселей в GIF-файлах и непостоянную частоту кадров / скорость анимации, в целом это довольно плохо, и это делает GIF размером 75 КБ равным 1,8 МБ, есть другие решения?

  • python
  • python-imaging-library
  • gif
  • анимированный gif

Попробуйте код ниже. Меня устраивает.

 из изображения импорта PIL
импортировать base64
импорт ОС
myimagestring = "R0lGODlhkAGQAfcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVm QDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/z PVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/ zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVm WbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpm qmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/ zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/ 8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9ВАП9ВМ/9ВЗв9Вмф9ВзП9В//+ААП+АМ/+АЗв+Амф+АзП+А//+qAP+qM/+qZv+qmf+qzP+q///ВАП/ВМ//ВЗв/Вмф/ВзП/В// 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 ТВБТВ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 8YPzfMPhLWH+ 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"
myimagedata = base64. b64decode(myimagestring)
myimagefile = открыть («myimage.gif», «wb»)
myimagefile.write(myimagedata)
myimagefile.close()
myimageobject = фотоизображение (файл = "myimage.gif")
 

И вот функция изменения размера изображения при необходимости:

 из PIL import Image
def get_resized_img (img_path, picture_size):
    img = Image.open(img_path)
    width, height = picture_size # это МАКСИМАЛЬНЫЕ размеры
    picture_ratio = ширина / высота
    img_ratio = img.size[0] / img.size[1]
    if picture_ratio >= 1: # картинка широкая
        if img_ratio <= picture_ratio: # изображение недостаточно широкое
            width_new = int (высота * img_ratio)
            size_new = ширина_новая, высота
        else: # изображение шире, чем изображение
            height_new = int (ширина / img_ratio)
            size_new = ширина, высота_новая
    else: # картинка высокая
        if img_ratio >= picture_ratio: # изображение недостаточно высокое
            height_new = int (ширина / img_ratio)
            size_new = ширина, высота_новая
        else: # изображение выше картинки
            width_new = int (высота * img_ratio)
            size_new = ширина_новая, высота
    вернуть img. resize(size_new, resample=Image.LANCZOS)
    
 
4

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *