Автор |
Сообщение |
Roman V. M.
Гость
|
Может ли Проксомитрон фильтровать картинки не по размеру в пикселях а по размеру в килобайтах/мегабайтах?
|
|
|
К началу |
|
 |
rokir
Admin
Зарегистрирован: 28.04.2004
Сообщения: 295
Откуда: Msk
|
Боюсь что корректно сделать это не возможно.
Может быть можно ограничивать получаемый размер всех картинок (т.е. если файл больше заданного размера, то будет получена лишь его часть, равная ограничению), что не очень корректно, да и не всеми серверами поддерживается...
Скорее всего это не возможно сделать силами proxomitron'а.
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Витя Малеев
Junior Member

Зарегистрирован: 30.06.2004
Сообщения: 20
Откуда: г. Норильск, Россия
|
А если в фильтре использовать заголовок Content-Length:
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2629
Откуда: SPb
|
2Витя Малеев: Гениально!
Кстати, как раз по размеру в пикселях не очень-то порежешь: в html он не всегда указан, а Prox размер обрабатываемого гифа не выдаёт, не говоря уж о неизвестных ему форматах.
|
|
|
К началу |
Профиль Сообщение |
 |
c0re
Newbee

Зарегистрирован: 05.08.2004
Сообщения: 4
Откуда: Саратов
|
ИМХО:
если картинка отдается скриптом, т.е. там *.php, *.pl и т.п.
то скорее всего Content-length даже и нет, либо он вообще хз чему равен...
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Гость
|
c0re писал(а): |
ИМХО:
если картинка отдается скриптом, т.е. там *.php, *.pl и т.п.
то скорее всего Content-length даже и нет, либо он вообще хз чему равен... |
Все там есть, только фильтр надо делать не текста страницы, а фильтр заголовка типа 'in'. Запрос, предположим скриптом, а вернут Content-Type: image/jpeg -- значит картинка, Content-Length: 20000, значит режем по размеру. Вообще-то все тривиально.
|
|
|
К началу |
|
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2629
Откуда: SPb
|
Вот фильтр, который убивает все картинки весом больше 50 Кб:
Код: |
In = TRUE
Out = FALSE
Key = "Content-Length: Kill images by filesize (in) [ALX]"
Match = "[#50000:*] $IHDR(Content-type: image/*)"
Replace = "55$RDIR(http://Local.ptron/killed.gif)"
|
Все "большие" графические файлы заменяются прозрачным гифом. Если хочется видеть что-то на месте картинок, можно заменять их на любой другой файл, менее прозрачный (не забудьте при этом поменять и размер файла в строке замены).
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
chAlx писал(а): |
Replace = "55$RDIR(http://Local.ptron/killed.gif)"
|
А что это за 55?
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2629
Откуда: SPb
|
Partyzan писал(а): |
chAlx писал(а): |
Replace = "55$RDIR(http://Local.ptron/killed.gif)"
|
А что это за 55? |
Размер файла, на который подменяется исходный.
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
А, ну да, то есть получается
Content-Length: 55
..байт
Понял, спасибо :-)
|
|
|
К началу |
Профиль Сообщение |
 |
taimael
Junior Member

Зарегистрирован: 22.01.2005
Сообщения: 34
|
фильтр супер!
единственный который не пропускает любые флэшки в принципе  ))
есть такая штука, когда картинка загружается постепенно - ее видно сразу полностью, но с очень плохим качеством, и по мере загрузки, качество улучшается.
можно ли сделать фильтр, который по такому принципу загружал бы первые [заданное количество килобайт] каждой картинки?
сори за, но требуемой терминологией абсолютно не владею
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
По-моему, нельзя, прокс ловит только начало соединения, и не может прервать в процессе.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2629
Откуда: SPb
|
taimael
Цитата: |
можно ли сделать фильтр, который по такому принципу загружал бы первые [заданное количество килобайт] каждой картинки? |
Если и можно было бы, то не факт, что ты бы их увидел: битые картинки не каждый браузер отображает (а урезанный файл -- это не то же, что файл в процессе загрузки: у него EOF не на том месте стоит, что приводит к ошибке).
Хотя попробовать создать фильтр можно: включить фильтрацию картинок (например, image/gif), прозрачно передавать первые N байт на выход, а остальное выкидывать с разрывом соединения. Можно даже в конец битого файла какую-нибудь заглушку приписывать, чтобы не очень битый был ;)
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
chAlx писал(а): |
битые картинки не каждый браузер отображает (а урезанный файл -- это не то же, что файл в процессе загрузки
|
Из наблюдений - Firefox отображает недокачанные картинки в составе странички, но не отображает отдельно загружаемую(и правильно). IE отображает и так, и так.
chAlx писал(а): |
Хотя попробовать создать фильтр можно: включить фильтрацию картинок (например, image/gif), прозрачно передавать первые N байт на выход, а остальное выкидывать с разрывом соединения. |
Каким образом?
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2629
Откуда: SPb
|
Что-то вроде этого:
Код: |
In = TRUE
Out = FALSE
Key = "Content-type: Cut images by filesize (in) [ALX]"
Match = "(image/*)\1$IHDR(Content-Length: [#50000:*])"
Replace = "\1$FILTER(True)"
Name = "Content-type: Cut images by filesize [ALX]"
Active = TRUE
Limit = 50001
Match = "$IHDR(Content-type: image/*)(?+{50000})\1*"
Replace = "\1\k"
|
Первый фильтр (заголовочный) включает фильтрацию для файлов, которые являются картинками и размером выше заданного, а второй обрезает такие файлы. Можно сделать более грамотную проверку: передавать из первого фильтра во второй URL для обработки, чтобы не перепроверять Content-type.
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
Отличная идея, я бы не догадался.
|
|
|
К началу |
Профиль Сообщение |
 |
taimael
Junior Member

Зарегистрирован: 22.01.2005
Сообщения: 34
|
chAlx писал(а): |
Что-то вроде этого:
Код: |
In = TRUE
Out = FALSE
Key = "Content-type: Cut images by filesize (in) [ALX]"
Match = "(image/*)\1$IHDR(Content-Length: [#50000:*])"
Replace = "\1$FILTER(True)"
Name = "Content-type: Cut images by filesize [ALX]"
Active = TRUE
Limit = 50001
Match = "$IHDR(Content-type: image/*)(?+{50000})\1*"
Replace = "\1\k"
|
Первый фильтр (заголовочный) включает фильтрацию для файлов, которые являются картинками и размером выше заданного, а второй обрезает такие файлы. Можно сделать более грамотную проверку: передавать из первого фильтра во второй URL для обработки, чтобы не перепроверять Content-type. |
А можно задавать ограничение не жестко, а в списке, например, такого формата:
default 50000
[сайт X] 1000
[сайт Y] 20000
[сайт Z] 0
...
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
taimael писал(а): |
А можно задавать ограничение не жестко, а в списке, например, такого формата:
default 50000
[сайт X] 1000
[сайт Y] 20000
[сайт Z] 0
... |
Это вопрос или утверждение? :-)
|
|
|
К началу |
Профиль Сообщение |
 |
taimael
Junior Member

Зарегистрирован: 22.01.2005
Сообщения: 34
|
Partyzan писал(а): |
taimael писал(а): |
А можно задавать ограничение не жестко, а в списке, например, такого формата:
default 50000
[сайт X] 1000
[сайт Y] 20000
[сайт Z] 0
... |
Это вопрос или утверждение? :-) |
вопрос, вот только не сообразил куда поставить его знак по правилам велико-могучего...
не после двоеточия же..., а в самом низу - как-то, кажется, слишком поздно...
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
Если по существу, в одном из своих фильтров я реализовал такую схему:
(([сайт X] $SET(\3=1000)|
([сайт Y] $SET(\3=20000)|
([сайт Z] $SET(\3=0)|
$SET(\3=50000))
Вместо [сайт X] можно вставлять список. Лучше пока не придумал.
|
|
|
К началу |
Профиль Сообщение |
 |
|