View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001627SAS.Планета[All Projects] Багpublic12-10-2012 05:1705-05-2014 06:54
Reporterolegpv 
Assigned Tozed 
PrioritynormalSeveritymajorReproducibilityalways
StatusresolvedResolutionfixed 
PlatformOSOS Version
Product Version120808 
Target Version140505Fixed in Version140505 
Summary0001627: Добавить режим получения типа тайла по содержимому игнорируя информацию от сервера
DescriptionНе открываются тайлы PNG, если Content-Type image/jpeg
В ТопоКарте (Маршруты.ру) часть тайлов не загружается.
Для них пишет error [53] non a jpeg file.
TagsNo tags attached.
Attached Files? file icon GTIMAGE.PAS [^] (22,673 bytes) 05-04-2014 18:31

- Relationships
has duplicate 0002383closedvdemidov Ошибка отображения нормально загруженного тайла 

-  Notes
(0009537)
Garl (manager)
14-10-2012 17:24

в этих случаях ресурс возвращает png под видом image\jpeg
(0009538)
Garl (manager)
14-10-2012 17:27

как вариант конечно можно прикрутить, но Планета не поддерживает 32 битные PNG
(0009540)
zed (manager)
14-10-2012 19:43

>но Планета не поддерживает 32 битные PNG
Как это не поддерживает. Должны читаться.
(0009552)
Garl (manager)
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 (reporter)
15-10-2012 17:28

жалко. самые лучшие топокарты оттуда. главное на разных уровнях разный масштаб. а может можно по содержанию определять формат как в браузерах.
(0009556)
zed (manager)
16-10-2012 04:41

>по всем признакам там jpeg, но содержимое там PNG32 bit
Ну так и решать нужно эту проблему, либо искать как её обойти. Оно и ежу понятно, что если на вход jpeg-декомпрессору подсунуть png файл, будет ошибка (о чём и сообщается в тикете). Каждый тип растра нужно обрабатывать именно тем декомпрессором, который под это заточен.

>в этих случаях ресурс возвращает png под видом image\jpeg
т.е. там в заголовках возвращается неверный content-type?
(0009558)
Garl (manager)
16-10-2012 04:44

>>в этих случаях ресурс возвращает png под видом image\jpeg
> т.е. там в заголовках возвращается неверный content-type?
именно
(0009559)
zed (manager)
16-10-2012 05:00

1. Кривой ресурс, и при возможности желательно сообщить об этом лаге их админу
2. В САСе, сразу после загрузки тайла, можно сделать проверку content-type по содержимому (в WinApi по-моему даже есть какая-то функция для этого). Соответственно, и в zmp нужно будет добавить тип image/png, чтобы вызывался правильный декомпрессор.
(0009560)
Garl (manager)
16-10-2012 05:01
edited on: 16-10-2012 05:01

ИМХО это сделато именно с целью борьбы с САС-Планетой :)

(0009563)
zed (manager)
16-10-2012 05:14

"На каждую хитрую гайку, всегда найдётся болт с левой резьбой" (c)
(0009564)
vdemidov (manager)
16-10-2012 07:04

Для таких хитрых болтов, в САС.Планете уже годы как есть режим игнорирования отдаваемых сервером content-type
(0009570)
Garl (manager)
16-10-2012 09:31

тут фишка в чём, в 99.9% отдаётся jpeg, а в 0.01% PNG32 под видом jpeg
и при defaultContentType=image/jpeg - пропускает ПНГ, иначе не ловит Джипеги
(0009598)
zed (manager)
18-10-2012 17:37

Т.е. в параметрах карты нужно либо прописать:
ContentType=image/jpeg, image/png

либо включить игнорирование контента:
IgnoreContentType=1

В обоих случаях, в кэш тайлы сохранятся в jpeg формате (те что прилетят в png будут автоматически сконвертированы в jpeg принудительно).
(0009600)
olegpv (reporter)
19-10-2012 06:24

не так не, так не работает
ContentType=image/jpeg, image/png там так и есть
(0009699)
Tolik (manager)
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 (manager)
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 (reporter)
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);
    }

}
(0014111)
vdemidov (manager)
05-04-2014 06:37

На самом деле самому перекодировать совсем не обязательно, достаточно отправить правильный нидер и САС сам все перекодирует. Проблема в том, что некоторые сервера нагло врут.
(0014112)
olegpv (reporter)
05-04-2014 06:53

но ведь можно определять тип не по content type а по самому содержимому картинки. наверняка и для дельфи есть какая нибудь библиотека. и в пхп и в джаве можно просто открыть картинку и они сами определяют тип. MOBAC с маршрутов скачивает эти картинки нормально и все показывается.
(0014113)
vdemidov (manager)
05-04-2014 15:39

Конечно можно, и даже нужно. В этом и состоит суть этой хотелки. Просто нужно найти или написать библиотеку для определения типа по содержимому и решить куда это вставить.
(0014114)
Garl (manager)
05-04-2014 18:30

вспомнил где видел определялку ) в NDN была одно время как плагин.

немного гугля, и вот оно:

http://philip.helger.com/gt/download.php#gtw
(0014115)
olegpv (reporter)
05-04-2014 18:45

вот еще простая
http://delphihaven.wordpress.com/2011/01/22/tip-detecting-graphic-formats/
можно вставить там где определяется по content type.
браузер тоже по содержимому определяет и показывает их.
(0014116)
zed (manager)
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 (manager)
07-04-2014 12:54

Сделал. В zmp появился новый параметр: DetectContentType=1, при включении которого, после загрузки тайла будет выполнятся анализ его содержимого и коррекция поля Content-Type (при необходимости и при условии, что таки удалось определить тип). Для определения типа используется функция FindMimeFromData и поддерживается ограниченное число форматов, но jpeg/gif/png/bmp там есть, так что её возможностей для нас должно быть достаточно.
(0014119)
vdemidov (manager)
07-04-2014 13:26

Для случая тайлохранилища на БерклиДб, СУБД и тп. можно было не конвертировать тайл, а сохранять как есть, если он того же класса так сказать. Тоесть, если ждем битмапку, а пришла kml это, конечно, ошибка. А если пришла любая битмпака, то можно сохранять и так.
(0014120)
zed (manager)
07-04-2014 13:45

Это вообще отдельный разговор. Тут мы просто исправляем хидеры ответа сервера, чтобы они соответствовали содержимому и всё было без обмана.
(0014121)
vdemidov (manager)
07-04-2014 14:08

Да знаю. Просто к слову пришлось. Это нужно отельную хотелку заводить.
(0014140)
Tolik (manager)
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 (manager)
14-04-2014 11:43

В приведенной цитате ContentType не прописан же.

ContentType=image/png,image/x-png,image/jpeg,image/pjpeg

Странно, что ругается на x-png и pjpeg, какая версия IE и что за винда?
(0014143)
zed (manager)
14-04-2014 11:47

> 140407.8030
> А что, ночнушка не скомпилировалась до сих пор?

В этой версии уже всё должно работать. Изменения были в 8029 коммите.
(0014144)
Tolik (manager)
14-04-2014 11:48
edited on: 14-04-2014 11:54

А, я думал, что ContentType можно не писать, чтобы брал любой.
Теперь работает, только старые серые квадраты надо стирать вручную.
Винда 7 SP1, а IE 8.

P.S. Закинул zmp в репо.

(0014145)
zed (manager)
14-04-2014 11:50

Не, ContentType писать нужно всегда.

- Users who viewed this issue
User List Anonymous (3978x), zed (1x)
Total Views 3979
Last View 06-08-2020 09:53

- 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 View Revisions
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 View Revisions
23-10-2012 05:03 Tolik Summary в топокарте маршруты ру часть тайлов не загружается => Не открываются тайлы PNG, если Content-Type image/jpeg
23-10-2012 05:03 Tolik Description Updated View Revisions
23-10-2012 05:08 Tolik Note Edited: 0009699 View Revisions
23-10-2012 09:55 Tolik Note Added: 0009711
23-10-2012 09:57 Tolik Note Edited: 0009699 View Revisions
23-10-2012 10:08 Tolik Note Edited: 0009699 View Revisions
23-10-2012 10:11 Tolik Note Edited: 0009711 View Revisions
23-10-2012 10:11 Tolik Note Edited: 0009711 View Revisions
23-10-2012 10:25 Tolik Note Edited: 0009699 View Revisions
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 View Revisions
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 View Revisions
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 View Revisions
14-04-2014 11:42 Tolik Note Edited: 0014140 View Revisions
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 View Revisions
05-05-2014 06:54 vdemidov Target Version 141111 => 140505
05-05-2014 06:54 vdemidov Fixed in Version 141111 => 140505



Copyright © 2007 - 2020 SAS.Planet Team