\code\ Jpeg thumb

Раздел посвящен программированию с использованием Power Basic.
volo
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 10.12.2004 (Пт) 11:18
Откуда: Soviet Union

\code\ Jpeg thumb

Сообщение volo » 17.04.2009 (Пт) 11:01

получает из Jpeg - thumb изображение предпросмотра
работает через коммандную строку
типа:
Jpeg_Themb.exe example.jpg

Со всеми видами кодировок Jpeg не проверял...

Код: Выделить всё
#COMPILE EXE
#DIM ALL

DECLARE FUNCTION find_start_of_image() AS LONG
DECLARE FUNCTION extract_thumbnail() AS LONG

GLOBAL k             AS LONG
GLOBAL temp2         AS BYTE
GLOBAL place_in_file AS LONG
GLOBAL result        AS LONG
GLOBAL m             AS LONG
GLOBAL afile         AS STRING
'*---------------------------------------------------------------------------------------------------------*/


FUNCTION PBMAIN () AS LONG

   afile = TRIM$(COMMAND$)
   IF afile <> "" THEN
         ! mov place_in_file,0

         OPEN afile FOR BINARY AS 1
            IF 0 = find_start_of_image() THEN
               CALL extract_thumbnail()
            ELSE
               MSGBOX "No thumbnail found."
            END IF
         CLOSE 1

   END IF
END FUNCTION


'*---------------------------------------------------------------------------------------------------------*/
FUNCTION find_start_of_image() AS LONG

'   searching for JPEG header
 
   WHILE ISFALSE EOF(1)
      'looking for start of JPEG marker
      GET 1,,temp2
      ! inc place_in_file
      IF temp2<0   THEN FUNCTION = 1: EXIT FUNCTION
      IF temp2=255 THEN
         ' first 1/2 of JPEG marker found, looking for second half.
         GET 1,,temp2
         ! inc place_in_file
         IF temp2<0 THEN FUNCTION = 1: EXIT FUNCTION
         IF temp2=216 THEN
            ' second 1/2 of JPEG marker found.
            WHILE ISFALSE EOF(1)
               ' looking for second JPEG marker
               GET 1,,temp2
               ! inc place_in_file
               IF temp2<0   THEN FUNCTION = 1: EXIT FUNCTION
               IF temp2=255 THEN
                  ' first 1/2 of 2dn JPEG marker found, looking for second half.
                  GET 1,,temp2
                  ! inc place_in_file
                  IF temp2<0   THEN FUNCTION = 1: EXIT FUNCTION
                  IF temp2=216 THEN
                     ' second 1/2 of 2nd JPEG marker found.
                     ' JPEG SOI marker found at
                     place_in_file = place_in_file - 1
                     SEEK 1,place_in_file
                     FUNCTION = 0: EXIT FUNCTION
                  END IF
                  IF temp2=217 THEN
                     FUNCTION = 1: EXIT FUNCTION
                  END IF
               END IF
            WEND
         END IF
      END IF
   WEND
   FUNCTION = 1
END FUNCTION
'*---------------------------------------------------------------------------------------------------------*/
FUNCTION extract_thumbnail() AS LONG
   OPEN "_" & afile FOR BINARY AS 2
   WHILE ISFALSE EOF(1)
      GET 1,,temp2
      PUT 2,,temp2
      IF temp2=255 THEN
         GET 1,,temp2
         PUT 2,,temp2
         IF temp2=217 THEN
            CLOSE 2
            FUNCTION = 0
            EXIT FUNCTION
         END IF
      END IF
   WEND
   CLOSE 2
   FUNCTION = 1
END FUNCTION

Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

Re: \code\ Jpeg thumb

Сообщение Dark Machine » 22.04.2009 (Ср) 10:30

Спасибо за код!

Я использую GDI+ для генерации thumb изображений (список файлов).
Вот сама ф-ция.
Передаем имя файла, на выходе Jpeg thumb буфер (файл) и размер самого буфера (filesz).
Размер thumb файла фиксирован (128/96)
Код: Выделить всё

$TMPFILE = "c:\_tmp.jpg"

FUNCTION make_thumb ( BYVAL file2load AS STRING, filesz AS LONG ) AS STRING
   LOCAL hStatus, f AS LONG
   LOCAL pGraphics, pThumbnail, pImage, nWidth, nHeight AS DWORD
   LOCAL strFilename, buff AS STRING

   strFileName = UCODE$( file2load )
   hStatus = GdipLoadImageFromFile(strFileName, pImage)

   hStatus = GdipGetImageWidth(pImage, nWidth)
   hStatus = GdipGetImageHeight(pImage, nHeight)

   ' the size of thumbnail. Resized as 6 percent of original
   nWidth  = 6 * nWidth  / 100
   nHeight = 6 * nHeight / 100

   nWidth  = 128
   nHeight = 96

   hStatus = GdipGetImageThumbnail(pImage, nWidth, nHeight, pThumbnail, %NULL, %NULL)

    CALL GdiPlusSaveImageToJpeg (pThumbnail, $TMPFILE)
    f = FREEFILE
    OPEN $TMPFILE FOR BINARY AS f
    filesz = LOF(f)
    GET$ #f, filesz, buff
    CLOSE #f

   IF pThumbnail THEN GdipDisposeImage(pThumbnail)
   IF pImage THEN GdipDisposeImage(pImage)
   
   FUNCTION = buff
END FUNCTION 

Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

Re: \code\ Jpeg thumb

Сообщение Dark Machine » 22.04.2009 (Ср) 10:42

include file
Вложения
TB_GDIPLUS.ZIP
(42.16 Кб) Скачиваний: 194

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: \code\ Jpeg thumb

Сообщение jangle » 22.04.2009 (Ср) 15:37

Как я понимаю thumb изображения просто вырезается из JPEG файла, а если JPEG не содержит этого thumb ?

Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

Re: \code\ Jpeg thumb

Сообщение Dark Machine » 22.04.2009 (Ср) 16:36

Второй код делает это.
В догонку, выложил код записи в Jpeg файл без сторонних библиотек.


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList