jpg 파일 (like pngj for PNG)에서 DPI를 읽을 수있는 Java 라이브러리가 있습니까? 이것은 안드로이드에 대한 코드이므로 java.awt.image를 사용할 수 없습니다. *안드로이드에서 JPG 파일의 DPI를 읽으려면 어떻게해야합니까?
그리고 안드로이드 비트 맵 클래스로이를 수행하는 방법이 있다면 정말 멋지게 될 것입니다.
jpg 파일 (like pngj for PNG)에서 DPI를 읽을 수있는 Java 라이브러리가 있습니까? 이것은 안드로이드에 대한 코드이므로 java.awt.image를 사용할 수 없습니다. *안드로이드에서 JPG 파일의 DPI를 읽으려면 어떻게해야합니까?
그리고 안드로이드 비트 맵 클래스로이를 수행하는 방법이 있다면 정말 멋지게 될 것입니다.
는 wikipedia에있어서, 이것은 JPEG 메타 작동 방법이다
제 2 바이트 (here를 지정된 SOI) 0xFFD8이다. 메타 데이터가있는 경우 0xFFE0 (2 바이트)
길이 세그먼트 (2 바이트) 식별자 세그먼트 (5 바이트 : 0x4A46494600)가 있으면 버전 세그먼트 (2 바이트) , 밀도 :
밀도 단위는 지정되지 않은 경우 1, PPI의 경우 1, PPC의 경우 2입니다.
그러면 x 밀도 (2 바이트)와 y 밀도 (2 바이트)를 얻게됩니다.
간단히 말해서 2 + 2 + 2 + 5 + 2 = 13 바이트를 건너 뛰고 밀도 단위 유형에 대해 1 바이트를 읽어야하며 0이 아닌 경우 밀도 값에 대해 다른 4 바이트를 읽습니다 (x와 y).
희망을 도울 수 있기를 바랍니다.
내가 궁금해서 조사해 보았습니다. 샘플 jpg 파일에서 멋진 스 니펫을 만들었습니다.
final InputStream inputStream=getResources().openRawResource(R.raw.tt);
try
{
inputStream.skip(13);
final int densityType=inputStream.read();
switch(densityType)
{
case 0:
Log.d("DEBUG","no density specified");
break;
case 1:
Log.d("DEBUG","density in PPI");
break;
case 2:
Log.d("DEBUG","density in PPC");
break;
}
if(densityType!=0)
{
final byte[] densityValue=new byte[2];
inputStream.read(densityValue);
final int xDensity=(densityValue[0]<<8)+densityValue[1];
inputStream.read(densityValue);
final int yDensity=(densityValue[0]<<8)+densityValue[1];
Log.d("DEBUG","xDensity:"+xDensity+" yDensity:"+yDensity);
}
}
catch(final IOException e)
{}
try
{
inputStream.close();
}
catch(final IOException e)
{}
편집 : 내가 너무 잘 문서를 읽지 않은대로, 모든 파일을 위해 일하는 것이 희망 나는 그들이 세그먼트 제외 APP0의 "길이를 대표로"길이 "바이트 무시해서는 안됩니다 생각 마커 "이므로 너무 작 으면 밀도 부분을 읽을 수 없으며 밀도와 관련이없는 내용을 읽을 수 있습니다.
나는 당신이 요점을 얻길 희망하고, 내 코드를 고치는 것은 그리 어렵지 않다.
jpeg 태그가 임의의 순서로 올 수 있고 데이터 위치에 대해 잘못된 가정을하기 때문에 샘플 코드가 모든 JPEG 파일에서 작동하지 않습니다. APP0 마커는 밀도 (DPI) 정보를 포함하지만 일반적으로 유효하지 않습니다. – BitBank
글쎄, 그래서 내가 잘못 쓴 것이 있으면, 수정하기 위해 무엇을 바꾸어야하는지 알려주세요. 이후 jpeg (및 대부분의 파일 형식) 작성된 전문가가 아니기 때문에, 내가 한 모든 웹 사이트에서 읽고 샘플 코드를 작성합니다. 코드를 수정하는 방법을 알고 있다면 알려주십시오. –
나는 기본적으로 이미 당신에게 대답을주었습니다. JPEG 태그 체인을 걸어보고 FFE0을 찾아야합니다. 그러면 코드가 모든 JPEG 파일에서 작동합니다. – BitBank
왜 필요한가요? DPI 데이터는 화면이 아닌 인쇄에 사용됩니다. 파일을 자원 폴더에 넣으면 이미지에 사용할 밀도를 결정합니다. –
우리는 PDF 파일을 생성하고 DPI를 사용하여 페이지의 이미지 크기를 결정합니다. –
public static int dpToPixels (Context context, float dp) { \t final float scale = context.getResources(). getDisplayMetrics(). 밀도; \t return (int) (dp * scale + 0.5f); \t} – JRowan