Как использовать PIL, чтобы изменить размеры и применить вращение информация о EXIF к файлу?

Существуют счетчики производительности для большого количества этого материала и если Вы не можете использовать Perfmon, можно получить доступ к счетчикам через API Диагностики.

21
задан Natim 22 October 2009 в 12:05
поделиться

3 ответа

Это вполне разумный подход. Для типичных приложений этого будет вполне достаточно.

Самая сложная часть белого списка необработанного HTML - это атрибут стиля и объект embed / . Существуют законные причины, по которым кто-то может захотеть поместить стили CSS в ненадежный блок форматированного текста или, скажем, во встроенное видео YouTube. Эта проблема чаще всего возникает с фидами. Вы не можете доверять произвольному блоку текста, содержащемуся в записи фида, но вы не хотите вырезать, например, выделение синтаксиса CSS или флэш-видео, потому что это коренным образом изменит контент и потенциально запутает любого, кто его читает. Поскольку CSS может содержать опасные вещи, такие как поведение в IE, вам, возможно, придется проанализировать CSS, если вы решите оставить атрибут стиля . А с embed / объект вам может потребоваться занести имена хостов в белый список .

Дополнение:

В худшем случае HTML-экранирование всего, что находится на виду, может привести к очень плохому взаимодействию с пользователем. Намного лучше использовать что-то вроде одного из парсеров HTML5, чтобы пройти через DOM с вашим белым списком. Это гораздо более гибко с точки зрения того, как вы представляете очищенный вывод своим пользователям. Вы даже можете делать такие вещи, как:

<div class="sanitized">
  <div class="notice">
    This was sanitized for security reasons.
  </div>
  <div class="raw"><pre>
    &lt;script&gt;alert("XSS!");&lt;/script&gt;
  </pre></div>
</div>

Затем скройте материал .raw с помощью CSS и используйте jQuery для привязки обработчика кликов к .sanitized div , который переключает между .raw и .notice :

CSS:

.raw {
  display: none;
}

jQuery:

15
ответ дан 29 November 2019 в 21:47
поделиться

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

Тогда я рекомендую использовать pyexiv2 и pyjpegtran в вашем случае. PIL не поддерживает вращение без потерь, которое является областью pyjpegtran. pyexiv2 - это библиотека, которая позволяет копировать метаданные из одного изображения в другое (я думаю, что имя метода - copyMetadata).

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

2
ответ дан 29 November 2019 в 21:47
поделиться

Although PIL can read EXIF metadata, it doesn't have the ability to change it and write it back to an image file.

A better choice is the pyexiv2 library. With this library it's quite simple flip the photo's orientation. Here's an example:

import sys
import pyexiv2

image = pyexiv2.Image(sys.argv[1])
image.readMetadata()

image['Exif.Image.Orientation'] = 6
image.writeMetadata()

This sets the orientation to 6, corresponding to "Rotated 90 CW".

6
ответ дан 29 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

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