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