如何在android中获取PNG格式的图像

Posted

技术标签:

【中文标题】如何在android中获取PNG格式的图像【英文标题】:How to get image in PNG format in android 【发布时间】:2019-11-12 18:05:05 【问题描述】:

我有一张图片保存在在线服务器中。

这就是为什么我必须先将图像转换为字符串。 但我也想以 PDF 格式显示这张图片。那么我怎样才能将这张图片用作PNG。

或者有没有其他方法可以让我使用iTextpdf 在 PDF 上显示它。我很迷惑。我搜索了很多,但没有任何帮助。

这是我的代码 (MainActivity):

String imageName = null;
final ImageSaver imageSaver = new ImageSaver(MainActivity.this);
if (imageUri != null && !imageUri.isEmpty()) 
    imageName = imageSaver.getFileName();
    Glide.with(MainActivity.this).asBitmap().load(imageUri)
        .listener(new RequestListener<Bitmap>() 
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) 
                return false;
            

            @Override
            public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) 
                // TODO : upload image here...
                imageSaver.save(resource);
                return true;
            
        ).submit();
 else 
    Log.e(TAG, "uploadImageToServer: no image to upload!!!");

ImageSaver 类:

public class ImageSaver 

    private static String directoryName = "images";

    public String getFileName() 
        return fileName;
    

    private String fileName;
    private Context context;
    public ImageSaver(Context context) 
        this.context = context;
        this.fileName = generateFileName();
    

    public String save(Bitmap bitmapImage) 
        String result= "";
        FileOutputStream fileOutputStream = null;
        try 
            fileOutputStream = new FileOutputStream(createFile());
            bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
            result = fileName;
         catch (Exception e) 
            e.printStackTrace();
         finally 
            try 
                if (fileOutputStream != null) 
                    fileOutputStream.close();
                
             catch (IOException e) 
                e.printStackTrace();
            
        

        return  result;
    

    @NonNull
    private File createFile() 
        File directory = context.getDir(directoryName, Context.MODE_PRIVATE);
        if(!directory.exists() && !directory.mkdirs())
            Log.e("ImageSaver","Error creating directory " + directory);
        

        return new File(directory, fileName);
    

    public static byte[] getImage(Context context, String imageName)
    
        try 
            File directory = context.getDir(directoryName, Context.MODE_PRIVATE);
            File image = new File(directory, imageName);
            Bitmap b = BitmapFactory.decodeStream(new FileInputStream(image));
            //return BitmapUtils.convertBitmapToByteArrayUncompressed(b);
            return BitmapUtils.convertBitmapToByteArray(b);
        
        catch (Exception e)
        
            e.printStackTrace();
            return null;
        

    

    private static String generateFileName() 
        DateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmss");
        Date date = new Date();
        return "image_" + dateFormat.format(date) + ".jpeg";
    

我之前从这样的资产文件夹中添加了图像:

try 
            InputStream ims = getAssets().open("naam.PNG");
            Bitmap bmp = BitmapFactory.decodeStream(ims);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            Image image = Image.getInstance(stream.toByteArray());
            image.scaleToFit(75, 90);
            image.setAlignment(Element.ALIGN_CENTER);

            cl = new PdfPCell(image, true);
            cl.setHorizontalAlignment(Element.ALIGN_CENTER);
            cl.setVerticalAlignment(Element.ALIGN_CENTER);
            cl.setBorderColor(BaseColor.WHITE);
            cl.setFixedHeight(21);
            tableclerk.addCell(cl);
        
        catch(IOException ex)  return; 
        tableclerk.setWidths(columnWidthsc);
        mDoc.add(tableclerk);

【问题讨论】:

Bitmap.CompressFormat.JPEG 您在此处将其保存为 JPEG。另存为 PNG。 这里我需要它作为 JPEG。问题是如何在 MainActivity 中将此图像用作 png? 然后将其另存为-JPEG和PNG,并在需要PNG的地方使用PNG 我已经做到了,但是如何通过这种方法将此图像返回为 PNG? 你用什么来编辑/创建 PDF? 【参考方案1】:

只需将图像保存为 .PNG 格式

 bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);

【讨论】:

这里我需要它为 JPEG。问题是如何在 MainActivity 中将此图像用作 png?

以上是关于如何在android中获取PNG格式的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中将 PDF 页面转换为图像?

如何在swift中从UIImage获取图像扩展/格式

如何获取PNG图片某点像素的rgba值

Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]

如何在颤动中显示所有图像格式?

如何在android中压缩和解压缩png图像