Что нового

_GDIPlus_ImageSaveToFile Не сохраняет открытый файл

saraconor

Чайник
Сообщения
349
Репутация
2
Скрипт вносит в jpg файл EXIF запись.
Только почему-то не может сохранить открытый файл:
Код:
#include <GDIPlus.au3>
#include <file.au3>

$FN = 'путь к файлу.jpg'
$FN2 = 'путь к копи файла.jpg'

_GDIPlus_Startup ()
$hFile = _GDIPlus_ImageLoadFromFile($FN)
_GDIPlus_SetMetaData($hFile,'ImageDescription', "Тестовая строка")
_GDIPlus_ImageSaveToFile($hFile,$FN2)
_GDIPlus_ImageDispose($hFile)
_GDIPlus_Shutdown()
Filemove($FN2,$FN,1)

Func _GDIPlus_SetMetaData($hHandle,$sTagName, $vStr)
    Local $tagPropertyItem = "ulong id; ulong length; ushort Type; ptr value"
    Local $Struct_String, $Struct_Meta, $aResult, $PropertyTagType
    $Struct_String=DllStructCreate("char[" & StringLen($vStr) +1 & "];")
    DllStructSetData($Struct_String,1,$vStr)
    $Struct_Meta = DllstructCreate($tagPropertyItem)
    DllStructSetData($Struct_Meta,"ID",0x10E)
    DllStructSetData($Struct_Meta,"Length",StringLen($vStr) +1)
    DllStructSetData($Struct_Meta,"Type",2)
    DllStructSetData($Struct_Meta,"Value",DllStructGetPtr($Struct_String))
    $aResult = DllCall($ghGDIPDll, "int", "GdipSetPropertyItem", "hwnd", $hHandle, "ptr", DllStructGetPtr($Struct_Meta))
EndFunc

так сохраняет данные в копию файла.

а пересохранить открытый файл не может:
Код:
#include <GDIPlus.au3>
#include <file.au3>

$FN = 'путь к файлу.jpg'

_GDIPlus_Startup ()
$hFile = _GDIPlus_ImageLoadFromFile($FN)
_GDIPlus_SetMetaData($hFile,'ImageDescription', "Тестовая строка")
_GDIPlus_ImageSaveToFile($hFile,$FN)
_GDIPlus_ImageDispose($hFile)
_GDIPlus_Shutdown()

Func _GDIPlus_SetMetaData($hHandle,$sTagName, $vStr)
	Local $tagPropertyItem = "ulong id; ulong length; ushort Type; ptr value"
	Local $Struct_String, $Struct_Meta, $aResult, $PropertyTagType
    $Struct_String=DllStructCreate("char[" & StringLen($vStr) +1 & "];")
    DllStructSetData($Struct_String,1,$vStr)
    $Struct_Meta = DllstructCreate($tagPropertyItem)
    DllStructSetData($Struct_Meta,"ID",0x10E)
	DllStructSetData($Struct_Meta,"Length",StringLen($vStr) +1)
	DllStructSetData($Struct_Meta,"Type",2)
	DllStructSetData($Struct_Meta,"Value",DllStructGetPtr($Struct_String))
	$aResult = DllCall($ghGDIPDll, "int", "GdipSetPropertyItem", "hwnd", $hHandle, "ptr", DllStructGetPtr($Struct_Meta))
EndFunc


Как заставить скрипт пересохранить открытый файл с записанными данными EXIF ?
 
Автор
S

saraconor

Чайник
Сообщения
349
Репутация
2
madmasles сказал(а):
1 вариант подкорректирован, там и планировалось использовать FileMove, только часть кода пропала при копировании.
Как бы обойтись без FileMove ?
 
Автор
S

saraconor

Чайник
Сообщения
349
Репутация
2
madmasles сказал(а):
saraconor [?]
Как бы обойтись без FileMove ?
А зачем искать трудный путь, если есть легкий?
В надежде сократить время работы с файлами. И еще при замене файла на новый курсор слетает с него на следующий в папке файл.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Код:
_GDIPlus_Startup()
$hFile = _GDIPlus_BitmapCreateFromMemory(Binary(FileRead($FN)))
_GDIPlus_SetMetaData($hFile, 'ImageDescription', "Тестовая строка")
_GDIPlus_ImageSaveToFile($hFile, $FN)
_GDIPlus_ImageDispose($hFile)
_GDIPlus_Shutdown()
 
Автор
S

saraconor

Чайник
Сообщения
349
Репутация
2
ERROR: _GDIPlus_BitmapCreateFromMemory(): undefined function.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
saraconor сказал(а):
ERROR: _GDIPlus_BitmapCreateFromMemory(): undefined function.
Ставьте более новую версию или адаптируйте функцию.
 
Верх