Такая вот тестовая заготовка для изменения размера обложки в книгах .fb2 (у меня книги в кодировке Ascii).
Размер меняется если он больше 800 пикселей по высоте (часто обложка весит много больше текста).
Код работает нормально, но такое ощущение, что в нем есть что-то лишнее (или неправильное)...
Гляньте опытным взором.
Код:
UseJPEGImageDecoder() : UseJPEGImageEncoder()
Global Xml.s
Procedure.s fnd(s1.s, s2.s, pz)
pos=FindString(Xml,s1,pz)
If pos
pos2=FindString(Xml,s2,pos+1)
p$=Mid(Left(Xml,pos2-1),pos+Len(s1))
EndIf
ProcedureReturn p$
EndProcedure
If ReadFile(0, "Test.fb2")
sz = Lof(0)
*buf = AllocateMemory(sz, #PB_Memory_NoClear)
ReadData(0, *buf, sz)
CloseFile(0)
Xml.s = PeekS(*buf, sz, #PB_Ascii)
FreeMemory(*buf)
pos = FindString(Xml, "<coverpage>")
If pos
txt$ = Chr(34)+fnd("#", Chr(34), pos+11)
pos = FindString(Xml, txt$, pos+200)
txt$ = fnd(">", "</binary>", pos)
size = StringByteLength(txt$, #PB_Ascii) : If size < 64 : size = 64 :EndIf
*buf = AllocateMemory(size, #PB_Memory_NoClear)
Base64Decoder(txt$,*buf,size)
If CatchImage(1,*buf)
FreeMemory(*buf)
hg=ImageHeight(1)
If hg>800
pr.f=ImageWidth(1)/hg*800
ResizeImage(1, pr, 800)
*buf = EncodeImage(1, #PB_ImagePlugin_JPEG)
lt$ = Base64Encoder(*buf, MemorySize(*buf))
FreeMemory(*buf)
Xml = ReplaceString(Xml, txt$, lt$, 0, pos, 1)
If CreateFile(2, "Test.fb2")
WriteString(2, Xml, #PB_Ascii)
CloseFile(2)
EndIf
EndIf
EndIf
EndIf
Debug "Gotovo"
Else
Debug "Net faila"
EndIf