Найти изображение наибольшей площади
Развлекаюсь с игрушкой, которую изготовил в предыущем посте (Как переложить файловую папку в базу) и не могу нарадоваться (как известно, сам себя не похвалишь...). Загрузил в базу фотоархив (покамест без содержания, только метаданные файлов):
Скрипт 1 Так находится самая здоровая картинка:
Скрипт 2 Ба, скажете вы, она и в эксплорере находится влет. В текущем фолдере – да. А если брать scope со вложенными подфолдерами? Я человек аскетичный и привык пользоваться только штатным Windows Explorer, но полагаю, что не всякий Коммандер умеет рыть в глубину. Или рассмотрим вот еще пример – см. сабж. Предположим, требуется отыскать в архивном загашнике максимально масштабное полотно. Известно, что у любой картинки есть ширина и высота, и эти свойства доступны в эксплорере наравне с массой других, не менее интересных. рис. 1 Можно упорядочить фотки по ширине, можно по высоте, но сделать вычисляемое поле в виде произведения, чтобы упорядочить по нему, к сожалению, не представляется возможным. Есть еще замечательное поле Dimensions, но оно строковое, а хотелось бы иметь численный результат этого произведения. Однако если это невозможно в эксплорере, давайте сделаем в SQL Server, ибо собирая файлы в базу (Скрипт 1), функция Dir, яже писана в предыдущем посте, до кучи зачерпнула эти свойства и теперь они лежат в XML-колонке Properties:
Скрипт 3 рис. 2 Не составляет труда их оттеда достать:
Скрипт 4 Сзади им надо отрезать слово pixels, а спереди – какую-то непонятную порнографию, которая на Скрипт 4 не видна, потому что отвалилась при копировании, но просматривается на рис.2. В итоге получаем:
Скрипт 5 Запрос достает файлы (isDir = 0) из заданного фолдера (IsDescendantOf), лежащие непосредственно под ним или в подфолдерах какой угодно глубины (потому что я не ставил ограничения на GetLevel), имеющие непустоты в атрибутах width и height, получает из ширины и высоты численные значения и упорядочивает результат по убыванию площади, сиречь произведения ширины на высоту. рис. 3 В качестве закрепления материала в качестве самостоятельного упражнения в целях повышения качества усвоения предлагается посчитать площадь, взяв ширину и высоту из атрибута Dimensions. Попутно сделайте то же на Powershell, не прибегая к загрузке данных в SQL Server. Автор: Алексей Шуленин |