Страницы: 1
RSS
Картинка на лист по умолчанию вставляется в уменьшенном виде
 
Здравствуйте!

сегодня пол дня возился с картинками (увеличение по клику)


Дано: картинка jpg
Диагноз: вставляется на лист Excel в уменьшенном виде
(картинки 111 и 222 вставляются неправильно. 333 для примера - вставляется правильно)
Лечение: удалить Exif из 111 и 222

не помогает:
пересохранение в фотошопе в jpg
пересохранение в фотошопе в png
кадрирование (обрезка) с пересохранением ACDSee
кадрирование (обрезка) с пересохранением в фотошопе
помогает:
PrintScreen картинки в натуральную величину, вставка в любой редактор, сохранение
смена формата jpg -> png ACDSee
удаление Exif данных (например с помощью ShowExif)

Архив с листом Excel и картинками (300 кб) http://rghost.ru/56491755

что самое интересное - эти картинки с неправильными Exif даже умудряются выбивать Excel в аут при точном подборе размеров на куске кода:
(код с сайта http://excelvba.ru/code/PastePictures)
Код
1
2
3
4
5
6
If AdjustWidth Then    
 PicRange.Cells(1).ColumnWidth = PicRange.Cells(1).ColumnWidth * ph.Width / PicRange.Cells(1).Width
   While Abs(PicRange.Cells(1).Width - ph.Width) > 0.1    ' точный подбор ширины ячейки
    PicRange.Cells(1).ColumnWidth = PicRange.Cells(1).ColumnWidth - 0.2 * (PicRange.Cells(1).Width - ph.Width)
   Wend
End If  
т.е. обычная картинка нормально проезжает по коду, а картинки 111 и 222 его зависают (там цикл не завершается)
это можно посмотреть в файле Книга1_.xlsm по кнопкам "НЕ зависает" и "зависает"

основную проблему, которая была по поводу этих картинок
можно посмотреть по кнопке "test"
Изменено: KUDRIN - 14.12.2014 15:45:06
 
Сразу подозревал, что проблема в разрешении картинок. у 111 и 222 оно 300dpi, у 111 без Exif - 96, а у 333 - сразу 96.
Экранное разрешение по умолчанию - 96. Поэтому Эксель и сжимает 111 и 222: у них размер в дюймах прописан в Exif.
Чтобы именно с этими картинками исправить уменьшение сделайте такую строчку
Код
1
ph.Width = ph.Width * 300 / 96
Причем изменять надо только 1 измерение. Иначе растянет в 2 раза. А вот как передать разрешение картинки в эксель - не знаю  :)  

Уберите маркеры изменения размеров ячейки в процедуре ПримерВставки... - перестанет зависать, так как не может подобрать высоту строки ровно под размер картинки, потому и циклит
Ну либо заранее меняйте разрешение картинки на 96
F1 творит чудеса
 
hohlick, свои сообщения можно править-дополнять.
 
можно каким-то vba кодом удалить данные Exif?
нашел только темы, где советуют скачать cls файл для чтения Exif

может в References есть модуль для удаления вообще всех exif данных?
ведь без предварительного удаления exif практически невозможно работать с вставкой картинок в файл.
Изменено: KUDRIN - 14.12.2014 13:53:56
 
Доброе время суток
KUDRIN,  можно модифицировать код от David Crowell под себя для записи "правильного" разрешения (в исходном только читает). Или воспользоваться библиотекой Tools/References - Microsoft Windows Image Acquisition Library 2.0 (но предустановлена ли с вашей версией Windows и разрядностью офиса не знаю).
Успехов!
 
как вариант еще можно перед вставкой сохранять в файл и читать из него правильное разрешение
потому что напрямую вставлять практически невозможно
у картинок в 100 пикселей размеры .width прыгают от 10 пикселей до 10000. в таком случае даже масштабирование не помогает, погрешность до 30%
Изменено: KUDRIN - 02.01.2015 17:16:01
 
Цитата
KUDRIN пишет: Лечение: удалить Exif из 111 и 222
все посты не читал в этой теме,поэтому вероятно есть ответ на мой вопрос.
скажите,что такое Exif и как вы его удалили ?
 
Цитата
Karataev пишет: что такое Exif
А такне пробовали спросить?
 
а как он их удалил ? в экселе или в какой- то другой программе ?
 
Цитата
Karataev пишет: все посты не читал в этой теме
И зря. Ответ в самом первом.
 
автор удалил с файлообменника  файлы . как посмотреть эти рисунки с exif ?
 
Любая фотка с фотоаппарата (телефона)
 
Если воспользоваться готовым решением для вставки картинок
http://excelvba.ru/programmes/PastePictures
со включенной опцией сжатия, - EXIF и прочая ерунда будет удалена автоматически
 
Цитата
Karataev пишет: как посмотреть эти рисунки с exif ?
например две картинки
Код
1
2
3
4
Call ActiveSheet.Shapes.AddPicture(aaa, msoFalse, msoCTrue, 0, 0, -1, -1)
Call ActiveSheet.Shapes.AddPicture(aaa, msoFalse, msoCTrue, 0, 0, -1, -1)
первая вставляется увеличенная на лист
вторая уменьшенная
Изменено: KUDRIN - 03.01.2015 11:22:17
Страницы: 1
Читают тему
Наверх
Loading...