Hi all,

was this issue fixed in 0.7.4?

I used „LoadFromPngData“ but no alpha channel was used.
--

Grüße/Regards,
[heubach-media] | Christian Sakowski
christian.sakow...@heubach-media.de
iChat/AIM: SakowskiF
Tel: +49/(0)40/52 10 59-23



> Am 13.08.2015 um 11:59 schrieb ram yd <ydramku...@gmail.com>:
> 
> Hi All,
> 
> I myself fixed this issue in PODOFO. 
> 
> Issue : Transparency mask is stripped off and not exported as smask.
> 
> Solution : I have converted 8 bit images to RGBA image and convert the 
> transparency stream as a /smask stream in pdf.
> 
> Tested with 8 bit pallete transparency image and RGBA transparency images
> 
> I dont know how to merge this changes to PODOFO codebase.
> 
> 
> void PdfImage::LoadFromPng(const char* pszFilename)
> {
>     if( !pszFilename )
>     {
>         PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
>     }
> 
>     FILE* hFile = fopen(pszFilename, "rb");
>     if( !hFile )
>     {
>         PODOFO_RAISE_ERROR_INFO( ePdfError_FileNotFound, pszFilename );
>     }
> 
>     png_byte header[8];
>     fread(header, 1, 8, hFile);
>     if( png_sig_cmp(header, 0, 8) )
>     {
>         fclose( hFile );
>         PODOFO_RAISE_ERROR_INFO( ePdfError_UnsupportedImageFormat, "The file 
> could not be recognized as a PNG file." );
>     }
>     
>     png_structp pPng = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, 
> NULL, NULL);
>     if( !pPng )
>     {
>         fclose( hFile );
>         PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
>     }
> 
>     png_infop pInfo = png_create_info_struct(pPng);
>     if( !pInfo )
>     {
>         png_destroy_read_struct(&pPng, (png_infopp)NULL, (png_infopp)NULL);
>         fclose( hFile );
>         PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
>     }
> 
>     if( setjmp(png_jmpbuf(pPng)) )
>     {
>         png_destroy_read_struct(&pPng, &pInfo, (png_infopp)NULL);
>         fclose( hFile );
>         PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
>     }
> 
>     png_init_io(pPng, hFile);
>     png_set_sig_bytes(pPng, 8);
>     png_read_info(pPng, pInfo);
> 
> // Begin
>     png_uint_32 width;
>     png_uint_32 height;
>     int depth;
>     int color_type;
>     int interlace;
> 
>     png_get_IHDR (pPng, pInfo,
>                   &width, &height, &depth,
>                   &color_type, &interlace, NULL, NULL);
> 
>     /* convert palette/gray image to rgb */
>     if (color_type == PNG_COLOR_TYPE_PALETTE)
>         png_set_palette_to_rgb(pPng);
> 
>     if( color_type == PNG_COLOR_TYPE_GRAY_ALPHA )
>         png_set_gray_to_rgb(pPng);
> 
> #if 0
>     /* expand gray bit depth if needed */
>     if (color_type == PNG_COLOR_TYPE_GRAY) {
> #if PNG_LIBPNG_VER >= 10209
>         png_set_expand_gray_1_2_4_to_8 (pPng);
> #else
>         png_set_gray_1_2_4_to_8 (pPng);
> #endif
>     }
> #endif
>     /* transform transparency to alpha */
>     if (png_get_valid (pPng, pInfo, PNG_INFO_tRNS))
>         png_set_tRNS_to_alpha (pPng);
> 
>     if (depth == 16)
>         png_set_strip_16(pPng);
> 
>     if (depth < 8)
>         png_set_packing(pPng);
> #if 0
>     /* convert grayscale to RGB */
>     if (color_type == PNG_COLOR_TYPE_GRAY ||
>     color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
>     {
>     png_set_gray_to_rgb (pPng);
>     }
> #endif
>     if (interlace != PNG_INTERLACE_NONE)
>         png_set_interlace_handling(pPng);
> 
>     //png_set_filler (pPng, 0xff, PNG_FILLER_AFTER);
> 
>     /* recheck header after setting EXPAND options */
>     png_read_update_info(pPng, pInfo);
>     png_get_IHDR (pPng, pInfo,
>                   &width, &height, &depth,
>                   &color_type, &interlace, NULL, NULL);
> // End //
>     
>     // Read the file
>     if( setjmp(png_jmpbuf(pPng)) ) 
>     {
>         png_destroy_read_struct(&pPng, &pInfo, (png_infopp)NULL);
>         fclose( hFile );
>         PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
>     }
> 
> 
>     long lLen = static_cast<long>(png_get_rowbytes(pPng, pInfo) * height);
>     char* pBuffer = static_cast<char*>(malloc(sizeof(char) * lLen));
>     png_bytepp pRows = NULL;
>     if (pBuffer)
>     {
>         pRows = static_cast<png_bytepp>(malloc(sizeof(png_bytep)*height));
>         if (pRows)
>         {
>             for (unsigned int y = 0; y < height; y++)
>             {
>                 pRows[y] = reinterpret_cast<png_bytep>(pBuffer + (y * 
> png_get_rowbytes(pPng, pInfo)));
>             }
> 
>             png_read_image(pPng, pRows);
> 
>             png_bytep *row_ptr, row;
>             row_ptr = pRows;
>             char* smask_data = static_cast<char*>(malloc(sizeof(char) * 
> (width*height)));
>             if (smask_data)
>             {
>                 int row_len = 3 * width * sizeof(png_byte);
> 
>                 for (int j = 0; j < height; j++) {
>                     row = pRows[j];
>                     for (int i = 0; i < width; i++) {
>                         smask_data[width * j + i] = row[4 * i + 3];
>                     }
>                 }
>                 char* image_data_ptr = pBuffer;
>                 for (int i = 0; i < width*height; i++)
>                 {
>                     memmove(image_data_ptr + (3 * i), image_data_ptr + (4 * 
> i), 3);
>                 }
> 
>                 fclose(hFile);
> 
>                 m_rRect.SetWidth(width);
>                 m_rRect.SetHeight(height);
> 
>                 this->SetImageColorSpace(ePdfColorSpace_DeviceRGB);
> 
> 
>                 // Set the image data and flate compress it
>                 PdfMemoryInputStream stream(pBuffer, row_len * height);
>                 this->SetImageData(width, height, depth, &stream);
> 
>                 PdfMemoryInputStream smaskstream(smask_data, width * height);
>                 PdfImage smakeImage(this->pCurDocParent);
>                 smakeImage.SetImageColorSpace(ePdfColorSpace_DeviceGray);
>                 smakeImage.SetImageData(width, height, depth, &smaskstream);
>                 this->SetImageSoftmask(&smakeImage);
>             }
>             free(smask_data);
>         }
>     }
>     
>     free(pBuffer);
>     free(pRows);
>     
>     png_destroy_read_struct(&pPng, &pInfo, (png_infopp)NULL);
> 
> }
> 
> On Fri, Aug 7, 2015 at 4:23 PM, ram yd <ydramku...@gmail.com> wrote:
> Hi 
> In our project, we are using PODOFO library to create PDF file. When I was 
> trying to add the PNG image with transparency, it exported the png image 
> without transparency in PDF file.
> 
> Further analysis shows that PODOFO lib is converting transparency to alpha 
> channel. But similar code is not exist in LibHaru. Libharu exporting the 
> transparency mask as xref.
> 
> Please let me know, how to export transparency png image by using PODOFO.
> 
> 
> 
> -- 
> Regards,
> Ramkumar Y.D
> 
> 
> 
> -- 
> Regards,
> Ramkumar Y.D
> ------------------------------------------------------------------------------
> _______________________________________________
> Podofo-users mailing list
> Podofo-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/podofo-users


--
heubach media
Osterfeldstr. 12-14 | Haus 1 | Eingang Nord
22529 Hamburg
tel: 040 / 52 10 59 - 10 | fax: -99
mail: i...@heubach-media.de
home: www.heubach-media.de
Geschäftsführer|CEO: Matthias Heubach

Mieten Sie Ihre Computer, iPads & Drucker für Ihre Events bei:
http://www.milo-rental.com

Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen.
Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten 
haben,
informieren Sie bitte sofort den Absender und vernichten Sie diese Mail.
Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht 
gestattet.
 
This e-mail may contain confidential and/or privileged information.
If you are not the intended recipient (or have received this e-mail in error)
please notify the sender immediately and destroy this e-mail.
Any unauthorized copying, disclosure or distribution of the
material in this e-mail is strictly forbidden.

------------------------------------------------------------------------------
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to