Cвойства File

dront

Гуру MediaWiki
Регистрация
24.03.2014
Сообщения
54
Реакции
1
На текущий момент в моей вики принято подгружать одно и тоже изображение с разными размерами. Есть файлы иконки (1:1,2), основного (1:6) и большого (1:20) изображений в пропорциях к реальным размерам объекта. Если размеры реального объекта 40 х 28 мм ,то я загружаю три файла: большое изображение 800 х 560 точек, основное 240 х 168 точек, и иконка 48 х 34.
Подумал, что это нерационально, ведь можно загрузить только одно большое изображение и пользуясь [[File:Example.jpg|50px]] указывать степень сжатия по горизонтали.
НО.... эту степень приходится указывать вручную, предварительно просчитывая на калькуляторе.
А если бы вытянуть какой-нибудь командой значение "width" изображения и вместо 50px вставить формулы:
[[File:Example.jpg|{{W=width(File:Example.jpg)/3,3}}px]] - основное
[[File:Example.jpg|{{W=width(File:Example.jpg)/16,6}}px]] - иконка

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


И вот еще, есть странички на которых отображается до 100 иконок по 3 кБ каждая, если вместо иконок будут отображаться изображения (по 250 кБ каждое), типа [[File:Example.jpg|50px]], то что хуже(труднее) для движка вики - наличие 100 лишних изображений в базе или отображать 100 уменьшенных изображений на одной странице?
 
Последнее редактирование:
На второй вопрос: уменьшенные изображения не хранятся в базе вики, они конвертируются один раз в нужный размер и находятся в папке на диске. Их размер в кб будет пропорциональным размеру в пикселях. В общем тут нужно делать так как вам удобнее, потому что для вики в любом случае результат и нагрузка будет одинаковой.

На первый вопрос: вообще непонятно зачем загружать на вики одно и тоже изображение с разными размерами если можно загрузить максимального размера и от него получить нужный размер просто указав его.
Также непонятно почему у вас размер иконки зависит от размера исходного изображения. Видимо это очень специфичная задача и стандартными средствами ее не решить.
 
Если вам совсем уж так нужно, чтобы картинка была уменьшена пропорционально к своему размеру, то можно сделать это через CSS, что-то типа width: 33%;

а картинке присвоить класс с этим CSS-свойством: [[File:Example.jpg|class=w33]]
 
Вообще-то все картинки в MW ресайзятся с сохранением пропорций. Или я чего-то не так понял?
 
Вообще-то все картинки в MW ресайзятся с сохранением пропорций.
Да. все верно. Но если нужно уменьшить на 66% от исходного размера? Вроде как стандартных инструментов для этого нет.
 
Да. все верно. Но если нужно уменьшить на 66% от исходного размера? Вроде как стандартных инструментов для этого нет.
Вообще не представляю зачем нужен такой изврат.
что-то типа width: 33%;
Это не уменьшит на 33%, это картинка будет занимать 33% ширины блока в котором выводится.
 
Ух ты, сколько ответов:)
Да задача специфическая, но может это мы, как наполнители, ее неразумно усложнили.
Вот пример. Здесь все по старому. Есть иконки, обычные и увеличенные изображения одного и того же объекта (почтовые марки)
http://wikiphilately.ru/index.php?title=Каталоги:Украина:2013

Вот результат, при котором загружена только одна картинка, а на страничке выдается в уменьшенном виде.
http://wikiphilately.ru/index.php?title=Каталоги:Украина:2014

Я просто задалбываюсь высчитывать эти пиксели. Так же как задалбываюсь загружать уменьшенные копии одного и того же изображения.

поймите разницу между
[[File:UA20140201.jpg|48px]] и [[File:UA20140201.jpg|(формула, в которой переменной "W" присваивается значение ширины картинки UA20140201.jpg в пикселях, делится на коэффициент "k", а результат равен 48px]]

В первом случае мне надо вручную посчитать эти 48px (реальный размер марки 40 х 28 мм, ширину, я умножаю на коэффициент 1,2 получаю 48px). Во втором случае будет формула и думать особо не надо.
Почему медиавики не может ширину загруженой картинки (UA20140201.jpg = 240) поделить на коэффициент 5 и получить те же 48.
Как присвоить переменной "W" значение ширины загруженной картинки? и будет ли работать конструкция [[File:UA20140201.jpg|W/5]]
 
Правильно ли я понимаю: для маленьких марок - маленькие превью, для марок побольше - превью побольше? Т. е. у вас есть скан марки и вы хотите его выводить как превью в масштабе, скажем, 1 к 10?
 
Наверное нужно было сначала пояснить специфику вики.

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

Пример: для вычисления размеров будущего изображения я, реальные размеры марки (40 х 28) умножаю на коэффициент 20 (вычислен эмпирически) и получаю размер изображения в пикселях (800 х 560). После этого сканированное (сфотографированное) изображение марки (1782 х 1268) я уменьшаю до 800 х 560, уменьшаю "вес" до 200-350 кБ, сохраняю под именем UA2014BIG0201.jpg и загружаю его в вики.
 
да, именно так. у меньших марок меньшие иконки
 
Я вижу такой вариант решения:
сделать для каждой марки шаблон с формулой расчета размера в пикселях. Внутри этого шаблона нужно будет прописывать реальный размер марки для расчетов. И затем вставлять вместо картинки этот шаблон с указанием относительного размера (типа icon, big, small, medium).
Идея в том, что вам для расчетов нужно где-то хранить реальный размер марки, можно хранить его в шаблоне, а уже на основании этого размера легко подсчитать требуемый размер в пикселях.

P.S. т.е. вместо [[Изображение:UA2013-01-01ico.jpg]] вы будете использовать {{Марка UA2013-01-01|ico}} в шаблоне будет стоять размер марки, допустим 5 см. и формула, что для ico нужно 50мм / 1,2 = 42 px. Исходный размер изображения марки может быть любого размера.
 
Последнее редактирование:
План такой:
1. делаем шаблон с параметром имени картинки
2. в шаблоне оборачиваем картинку в <span> с классом
3. яваскриптом берем размер картинки из нашего спана и уменьшаем размер до нужного

что-то типа:

Код:
var w = $(".resize_class img").width();
var h = $(".resize_class img").height();
$(".resize_class img").width( w * 0.1 ); // масштаб 1 к 10
$(".resize_class img").height( h * 0.1 );
 
хотя правильне будет написать расширение, которое будет ресайзить вашу картинку на сервере и кешировать результаты.
 
а зачем "height"... Разве MW пропорции не соблюдает?
 
MW да, соблюдает. Но я вам предложил вариант с яваскриптом, в котором вы сами должны все соблюсти.
 
Если через шаблон, то примерно так?

шаблон Image

[[File:{{{name of File}}}|{{#expr:{{{W}]}}*{{{k}}}px]]


вызов шаблона
{{Image
|name of File=UA2014BIG0201.jpg
|W=40
|k=1,2
}}

результат
[[File:UA2014BIG0201.jpg|48px]]
 
Все красиво, но почему MW не может вытянуть из файла UA2014BIG0201.jpg его ширину в пикселях?

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

П. С. Лучше напишите три шаблона, в разными размерами превью — big, medium, large — понятнее будет.
 
этим я сэкономлю только на строчке

|k=1,2

но буду вынужден всегда помнить правильное название шаблона
 
Назад
Верх