Такая вот тестовая заготовка для изменения размера обложки в книгах .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