SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0001627 | SAS.Планета | [All Projects] Баг | public | 12-10-2012 05:17 | 05-05-2014 06:54 |
|
Reporter | olegpv | |
Assigned To | zed | |
Priority | normal | Severity | major | Reproducibility | always |
Status | resolved | Resolution | fixed | |
Platform | | OS | | OS Version | |
Product Version | 120808 | |
Target Version | 140505 | Fixed in Version | 140505 | |
|
Summary | 0001627: Добавить режим получения типа тайла по содержимому игнорируя информацию от сервера |
Description | Не открываются тайлы PNG, если Content-Type image/jpeg
В ТопоКарте (Маршруты.ру) часть тайлов не загружается.
Для них пишет error [53] non a jpeg file. |
Steps To Reproduce | |
Additional Information | |
Tags | No tags attached. |
Relationships | has duplicate | 0002383 | closed | vdemidov | Ошибка отображения нормально загруженного тайла |
|
Attached Files | GTIMAGE.PAS (22,673) 05-04-2014 18:31 http://www.sasgis.org/mantis/file_download.php?file_id=1724&type=bug |
|
Issue History |
Date Modified | Username | Field | Change |
12-10-2012 05:17 | olegpv | New Issue | |
12-10-2012 05:17 | olegpv | File Added: mar.png | |
14-10-2012 17:24 | Garl | Note Added: 0009537 | |
14-10-2012 17:27 | Garl | Note Added: 0009538 | |
14-10-2012 17:35 | Garl | File Added: png_jpg.jpg | |
14-10-2012 19:43 | zed | Note Added: 0009540 | |
15-10-2012 16:45 | Garl | Note Added: 0009552 | |
15-10-2012 17:28 | olegpv | Note Added: 0009553 | |
16-10-2012 04:41 | zed | Note Added: 0009556 | |
16-10-2012 04:44 | Garl | Note Added: 0009558 | |
16-10-2012 05:00 | zed | Note Added: 0009559 | |
16-10-2012 05:01 | Garl | Note Added: 0009560 | |
16-10-2012 05:01 | Garl | Note Edited: 0009560 | bug_revision_view_page.php?bugnote_id=9560#r4641 |
16-10-2012 05:14 | zed | Note Added: 0009563 | |
16-10-2012 07:04 | vdemidov | Note Added: 0009564 | |
16-10-2012 09:31 | Garl | Note Added: 0009570 | |
18-10-2012 17:37 | zed | Note Added: 0009598 | |
19-10-2012 06:24 | olegpv | Note Added: 0009600 | |
23-10-2012 05:00 | Tolik | Note Added: 0009699 | |
23-10-2012 05:00 | Tolik | Status | new => acknowledged |
23-10-2012 05:01 | Tolik | Note Edited: 0009699 | bug_revision_view_page.php?bugnote_id=9699#r4705 |
23-10-2012 05:03 | Tolik | Summary | в топокарте маршруты ру часть тайлов не загружается => Не открываются тайлы PNG, если Content-Type image/jpeg |
23-10-2012 05:03 | Tolik | Description Updated | bug_revision_view_page.php?rev_id=4707#r4707 |
23-10-2012 05:08 | Tolik | Note Edited: 0009699 | bug_revision_view_page.php?bugnote_id=9699#r4708 |
23-10-2012 09:55 | Tolik | Note Added: 0009711 | |
23-10-2012 09:57 | Tolik | Note Edited: 0009699 | bug_revision_view_page.php?bugnote_id=9699#r4720 |
23-10-2012 10:08 | Tolik | Note Edited: 0009699 | bug_revision_view_page.php?bugnote_id=9699#r4721 |
23-10-2012 10:11 | Tolik | Note Edited: 0009711 | bug_revision_view_page.php?bugnote_id=9711#r4723 |
23-10-2012 10:11 | Tolik | Note Edited: 0009711 | bug_revision_view_page.php?bugnote_id=9711#r4724 |
23-10-2012 10:25 | Tolik | Note Edited: 0009699 | bug_revision_view_page.php?bugnote_id=9699#r4725 |
19-05-2013 12:02 | zed | Project | Доработка карты (ZMP) => SAS.Планета |
28-05-2013 12:41 | vdemidov | Status | acknowledged => confirmed |
28-05-2013 12:41 | vdemidov | Product Version | => 120808 |
28-05-2013 12:41 | vdemidov | Target Version | => 50xxxx |
28-05-2013 12:41 | vdemidov | Summary | Не открываются тайлы PNG, если Content-Type image/jpeg => Добавить режим получения типа тайла по содержимому игнорируя информацию от сервера |
28-05-2013 12:41 | vdemidov | Description Updated | bug_revision_view_page.php?rev_id=5384#r5384 |
19-03-2014 12:59 | vdemidov | Relationship added | has duplicate 0002383 |
05-04-2014 06:31 | olegpv | Note Added: 0014110 | |
05-04-2014 06:37 | vdemidov | Note Added: 0014111 | |
05-04-2014 06:53 | olegpv | Note Added: 0014112 | |
05-04-2014 15:39 | vdemidov | Note Added: 0014113 | |
05-04-2014 18:30 | Garl | Note Added: 0014114 | |
05-04-2014 18:31 | Garl | File Added: GTIMAGE.PAS | |
05-04-2014 18:45 | olegpv | Note Added: 0014115 | |
06-04-2014 04:48 | zed | Note Added: 0014116 | |
06-04-2014 04:49 | zed | Note Edited: 0014116 | bug_revision_view_page.php?bugnote_id=14116#r6011 |
07-04-2014 12:54 | zed | Note Added: 0014118 | |
07-04-2014 13:06 | zed | Status | confirmed => resolved |
07-04-2014 13:06 | zed | Fixed in Version | => 141111 |
07-04-2014 13:06 | zed | Resolution | open => fixed |
07-04-2014 13:06 | zed | Assigned To | => zed |
07-04-2014 13:07 | zed | Target Version | 50xxxx => 141111 |
07-04-2014 13:07 | zed | File Deleted: mar.png | |
07-04-2014 13:07 | zed | File Deleted: png_jpg.jpg | |
07-04-2014 13:26 | vdemidov | Note Added: 0014119 | |
07-04-2014 13:45 | zed | Note Added: 0014120 | |
07-04-2014 14:08 | vdemidov | Note Added: 0014121 | |
14-04-2014 11:39 | Tolik | Note Added: 0014140 | |
14-04-2014 11:41 | Tolik | Note Edited: 0014140 | bug_revision_view_page.php?bugnote_id=14140#r6015 |
14-04-2014 11:42 | Tolik | Note Edited: 0014140 | bug_revision_view_page.php?bugnote_id=14140#r6016 |
14-04-2014 11:43 | zed | Note Added: 0014141 | |
14-04-2014 11:47 | zed | Note Added: 0014143 | |
14-04-2014 11:48 | Tolik | Note Added: 0014144 | |
14-04-2014 11:50 | zed | Note Added: 0014145 | |
14-04-2014 11:54 | Tolik | Note Edited: 0014144 | bug_revision_view_page.php?bugnote_id=14144#r6018 |
05-05-2014 06:54 | vdemidov | Target Version | 141111 => 140505 |
05-05-2014 06:54 | vdemidov | Fixed in Version | 141111 => 140505 |
Notes |
|
(0009537)
|
Garl
|
14-10-2012 17:24
|
|
в этих случаях ресурс возвращает png под видом image\jpeg |
|
|
(0009538)
|
Garl
|
14-10-2012 17:27
|
|
как вариант конечно можно прикрутить, но Планета не поддерживает 32 битные PNG |
|
|
(0009540)
|
zed
|
14-10-2012 19:43
|
|
>но Планета не поддерживает 32 битные PNG
Как это не поддерживает. Должны читаться. |
|
|
(0009552)
|
Garl
|
15-10-2012 16:45
|
|
читаются, но отображаются не корректно (см вложение png_jpg.jpg)
вот но тайл http://maps.marshruty.ru/ml.ashx?al=1&i=1&x=1244&y=734&z=11
по всем признакам там jpeg, но содержимое там PNG32 bit |
|
|
(0009553)
|
olegpv
|
15-10-2012 17:28
|
|
жалко. самые лучшие топокарты оттуда. главное на разных уровнях разный масштаб. а может можно по содержанию определять формат как в браузерах. |
|
|
(0009556)
|
zed
|
16-10-2012 04:41
|
|
>по всем признакам там jpeg, но содержимое там PNG32 bit
Ну так и решать нужно эту проблему, либо искать как её обойти. Оно и ежу понятно, что если на вход jpeg-декомпрессору подсунуть png файл, будет ошибка (о чём и сообщается в тикете). Каждый тип растра нужно обрабатывать именно тем декомпрессором, который под это заточен.
>в этих случаях ресурс возвращает png под видом image\jpeg
т.е. там в заголовках возвращается неверный content-type? |
|
|
(0009558)
|
Garl
|
16-10-2012 04:44
|
|
>>в этих случаях ресурс возвращает png под видом image\jpeg
> т.е. там в заголовках возвращается неверный content-type?
именно |
|
|
(0009559)
|
zed
|
16-10-2012 05:00
|
|
1. Кривой ресурс, и при возможности желательно сообщить об этом лаге их админу
2. В САСе, сразу после загрузки тайла, можно сделать проверку content-type по содержимому (в WinApi по-моему даже есть какая-то функция для этого). Соответственно, и в zmp нужно будет добавить тип image/png, чтобы вызывался правильный декомпрессор. |
|
|
(0009560)
|
Garl
|
16-10-2012 05:01
|
|
ИМХО это сделато именно с целью борьбы с САС-Планетой :)
|
|
|
(0009563)
|
zed
|
16-10-2012 05:14
|
|
"На каждую хитрую гайку, всегда найдётся болт с левой резьбой" (c) |
|
|
|
Для таких хитрых болтов, в САС.Планете уже годы как есть режим игнорирования отдаваемых сервером content-type |
|
|
(0009570)
|
Garl
|
16-10-2012 09:31
|
|
тут фишка в чём, в 99.9% отдаётся jpeg, а в 0.01% PNG32 под видом jpeg
и при defaultContentType=image/jpeg - пропускает ПНГ, иначе не ловит Джипеги |
|
|
(0009598)
|
zed
|
18-10-2012 17:37
|
|
Т.е. в параметрах карты нужно либо прописать:
ContentType=image/jpeg, image/png
либо включить игнорирование контента:
IgnoreContentType=1
В обоих случаях, в кэш тайлы сохранятся в jpeg формате (те что прилетят в png будут автоматически сконвертированы в jpeg принудительно). |
|
|
(0009600)
|
olegpv
|
19-10-2012 06:24
|
|
не так не, так не работает
ContentType=image/jpeg, image/png там так и есть |
|
|
(0009699)
|
Tolik
|
23-10-2012 05:00
(edited on: 23-10-2012 10:25) |
|
Проблема в том, что SAS не пытается открыть этот PNG файл с расширением jpg, выдаёт ошибку
"This is not JPEG file, starts with 0x89 0x50".
Надо исправить в коде, чтобы вместо этой ошибки запускался декодер PNG (ибо 0x89 0x50 - это и есть начало %PNG).
Пример неправильного контент тайпа здесь: 56°01'24.77" 37°00'00.43", зум 12, а также крестом во все стороны от этого тайла.
Сам тайл открывается сасом без проблем.
Просьба к Администратору перенести этот тикет в проект SAS.
|
|
|
(0009711)
|
Tolik
|
23-10-2012 09:55
(edited on: 23-10-2012 10:11) |
|
Если в params.txt сделать
IgnoreContentType=1
DefaultContentType=image/png
то скачиваются именно плохие тайлы и сохраняются в формате jpg (что позволяет докачать дыры. Хорошие jpg при этом почему-то не скачиваются.)
Но если вернуть IgnoreContentType=0, то они затираются файлами в формате png (с расширением jpg), которые не отображаются на карте.
|
|
|
(0014110)
|
olegpv
|
05-04-2014 06:31
|
|
сделал такой скрипт на пхп.
он преобразовывает файлы png в jpg а jpg не изменяет
можно его либо на локальном сервере выкладывать либо на хостинге и в настройках карты его url писать
<?php
$x=$_GET['x'];
$y=$_GET['y'];
$z=$_GET['z'];
$url='http://maps.marshruty.ru/ml.ashx?al=1&i=1&x='.$x.'&y='.$y.'&z='.$z.'&i=1&ss=7f0924';
// создание нового cURL ресурса
$ch = curl_init();
// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$data = curl_exec($ch);
curl_close($ch);
$info = getimagesizefromstring ($data);
if ($info !== false) {
$width = $info[0];
$height = $info[1];
//if ($this->w < $minWidth || $this->h < $minHeight) return false;
$image_type = $info[2];
header('Content-Type: image/jpeg');
if($image_type==IMAGETYPE_JPEG){
echo $data;
}else{
$img=imagecreatefromstring($data);
//$c = imagecolorallocate($img, 255, 255, 255);
//$c = imagecolorallocate($img, 0,0,0);
// Make the background transparent
//imagecolortransparent($img, $c);
$output = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($output, 255, 255, 255);
imagefilledrectangle($output, 0, 0, $width, $height, $white);
imagecopy($output, $img, 0, 0, 0, 0, $width, $height);
imagejpeg($output,null,100);
}
} |
|
|
|
На самом деле самому перекодировать совсем не обязательно, достаточно отправить правильный нидер и САС сам все перекодирует. Проблема в том, что некоторые сервера нагло врут. |
|
|
(0014112)
|
olegpv
|
05-04-2014 06:53
|
|
но ведь можно определять тип не по content type а по самому содержимому картинки. наверняка и для дельфи есть какая нибудь библиотека. и в пхп и в джаве можно просто открыть картинку и они сами определяют тип. MOBAC с маршрутов скачивает эти картинки нормально и все показывается. |
|
|
|
Конечно можно, и даже нужно. В этом и состоит суть этой хотелки. Просто нужно найти или написать библиотеку для определения типа по содержимому и решить куда это вставить. |
|
|
(0014114)
|
Garl
|
05-04-2014 18:30
|
|
вспомнил где видел определялку ) в NDN была одно время как плагин.
немного гугля, и вот оно:
http://philip.helger.com/gt/download.php#gtw |
|
|
(0014115)
|
olegpv
|
05-04-2014 18:45
|
|
вот еще простая
http://delphihaven.wordpress.com/2011/01/22/tip-detecting-graphic-formats/
можно вставить там где определяется по content type.
браузер тоже по содержимому определяет и показывает их. |
|
|
(0014116)
|
zed
|
06-04-2014 04:48
(edited on: 06-04-2014 04:49) |
|
FindMimeFromData:
contains hard-coded tests for (currently 26) separate MIME types (see Known MIME Types). This means that if a given buffer contains data in the format of one of these MIME types, a test exists in FindMimeFromData that is designed (by scanning through the buffer contents) to recognize the corresponding MIME type.
Функция живёт в urlmon.pas.
|
|
|
(0014118)
|
zed
|
07-04-2014 12:54
|
|
Сделал. В zmp появился новый параметр: DetectContentType=1, при включении которого, после загрузки тайла будет выполнятся анализ его содержимого и коррекция поля Content-Type (при необходимости и при условии, что таки удалось определить тип). Для определения типа используется функция FindMimeFromData и поддерживается ограниченное число форматов, но jpeg/gif/png/bmp там есть, так что её возможностей для нас должно быть достаточно. |
|
|
|
Для случая тайлохранилища на БерклиДб, СУБД и тп. можно было не конвертировать тайл, а сохранять как есть, если он того же класса так сказать. Тоесть, если ждем битмапку, а пришла kml это, конечно, ошибка. А если пришла любая битмпака, то можно сохранять и так. |
|
|
(0014120)
|
zed
|
07-04-2014 13:45
|
|
Это вообще отдельный разговор. Тут мы просто исправляем хидеры ответа сервера, чтобы они соответствовали содержимому и всё было без обмана. |
|
|
|
Да знаю. Просто к слову пришлось. Это нужно отельную хотелку заводить. |
|
|
(0014140)
|
Tolik
|
14-04-2014 11:39
(edited on: 14-04-2014 11:42) |
|
Что-то не работает.
Говорит, unexpected content type image/x-png или image/pjpeg
140407.8030
А что, ночнушка не скомпилировалась до сих пор?
plus.maps\_Genshtab\topo_marshruty.zmp\
[PARAMS]
pnum=199
GUID={025de135-53fd-45db-b90e-fafbb7fb3bf4}
name=рНОНйЮПРЮ (лЮПЬПСРШ.ПС)
name_en=TopoMap (marshruty.ru)
name_uk=TopoMap (marshruty.ru)
NameInCache=topo_marshruty
DefURLBase=http://maps.marshruty.ru/ml.ashx?al=1&i=1&x=
DetectContentType=1
ParentSubMenu=цЕМЬРЮА
ParentSubMenu_en=Genshtab
ParentSubMenu_uk=Genshtab
Ext=.jpg
projection=1
sradiusa=6378137
sradiusb=6378137
UseDwn=1
RequestHead=Referer: http://maps.marshruty.ru/
|
|
|
(0014141)
|
zed
|
14-04-2014 11:43
|
|
В приведенной цитате ContentType не прописан же.
ContentType=image/png,image/x-png,image/jpeg,image/pjpeg
Странно, что ругается на x-png и pjpeg, какая версия IE и что за винда? |
|
|
(0014143)
|
zed
|
14-04-2014 11:47
|
|
> 140407.8030
> А что, ночнушка не скомпилировалась до сих пор?
В этой версии уже всё должно работать. Изменения были в 8029 коммите. |
|
|
(0014144)
|
Tolik
|
14-04-2014 11:48
(edited on: 14-04-2014 11:54) |
|
А, я думал, что ContentType можно не писать, чтобы брал любой.
Теперь работает, только старые серые квадраты надо стирать вручную.
Винда 7 SP1, а IE 8.
P.S. Закинул zmp в репо.
|
|
|
(0014145)
|
zed
|
14-04-2014 11:50
|
|
Не, ContentType писать нужно всегда. |
|