내가 구글 포토스로 대량의 이미지 파일을 올리고 있는데,


 다음과 같이 검색하니 제대로 검색이 안되었다.


 이미지 파일명


 cd20161113.z01_0001.png

 cd20161113.z01_0002.png

 cd20161113.z01_0003.png

 cd20161113.z02_0001.png

 cd20161113.z02_0002.png

 cd20161113.z03_0001.png


 이렇게 있다면,


 cd20161113 라고 하면, 전체 다 검색이 되는데,


 cd20161113.z01

 이렇게 하면, .z01 때문인지 검색이 제대로 안되고, 없는 폴더. 라는게 계속 뜨게 되었다.


 여기서 title:을 사용하면, 파일 명으로 검색이 가능하게 된다.


 예) title:cd20161113.z01


 이렇게 하면, 이상없이 검색이 가능하며,


 cd20161113.z01_0001.png

 cd20161113.z01_0002.png


 이렇게 부분적으로 검색이 가능하다.


 포토스에서는 불가능하고, 구글 드라이브에서만 가능하다.


 이를 이용해서 포토스로 백업을 하고 검색할때, 구글 드라이브를 이용해서 다운 받는게 용이하다. 라고 볼 수 있을 것이다.


 참조한 링크 : https://support.google.com/drive/answer/2375114?hl=ko&ref_topic=2463645

Posted by JunkMam
,

GSplit 프로그램.

연습 2016. 11. 13. 22:00

 파일을 분할 처리하는 프로그램 GSplit프로그램을 소개하도록 하겠다.


 링크 : http://www.gdgsoft.com/gsplit/


 GSplit 동일한 파일을 분할하고, 해당 프로그램이 없어도 EXE파일을 생성해서 실행 파일로 분할을 처리하는 프로그램이다.(Self-Uniting)


 분할 했을때, CRC32등을 이용해서 분할 프로그램의 문제를 점검할 수도 있다.


 파일을 분할해야 할 경우는 거진 없을 경우도 있지만(대부분 분할 압축을 처리한다.)


 zip의 분할 압축과 유사한 것이므로, zip으로 분할하지 못할 경우에 사용하면 효율적일 것이다.


 CD/DVD/USB을 이용해서 바로 넣을 수도 있다.


 블로그에서도 사용을 할 수 있다.


 사용법이 간편하다. 라는 점이 있다.

Posted by JunkMam
,

 원본 링크 : http://yuuxxxx.hatenablog.com/entry/2013/09/20/224801

 참조 링크 : http://jo.centis1504.net/?p=1535


 

1
2
3
4
5
6
7
8
9
10
var linkElement=document.getElementById('link');
if/*@cc_on ! @*/ false ) {
    // IE
    linkElement.fireEvent("onclick");
else {
    // Others
    var event = document.createEvent("MouseEvents");
    event.initEvent("click"falsetrue);
    linkElement.dispatchEvent(event);
}
cs


 구글 포토스를 사용하면서 불편한 것이 올렸을때, 자동으로 삭제되어야 되는 경우와 구글 드라이브를 이용해서 사용한다고 해도 paperbak이라는 것의 자체가 대량의 파일이 발생하기 때문에 문제가 된다.


 그래서 javascript를 이용한 자동장치가 필요할 것 같아서 이렇게 기록을 한다.


 document.createEvent라는 것으로 이벤트를 발생시킨다.


 문서 링크 : https://developer.mozilla.org/ko/docs/Web/API/Document/createEvent


 createEvent("MouseEvents") 라는 것 자체가 마우스에 이벤트를 일으키는 용도로 쓰인다.


 다양한 이벤트가 있는데, KeyBoardEvent도 있다.


 initEvent라는 것은 이벤트의 종류를 정의하는 것이다.


 click이벤트를 가지고 있다는 것으로, 그외 자세한건 문서 링크를 참조하면 될 것이다.


 이것은 Click이벤트를 발생시키는 것으고, click말고 mouseup등 마우스의 이벤트 전체를 가지고 있다.

Posted by JunkMam
,

참조 링크 : http://snskshn.tistory.com/category/Windows/PowerShell

 프로그램 2개 이상이나, 작동하는 과정이 있는데, 이것에 대해서 문제가 없는지 확인 하기 위해서 프로그램 수행시간 측정이 필요해졌다.


 하지만, 이것에 대해서 관리하거나 처리하기 귀찮아서, powershell 자체에서 지원해주는게 없는지 검색해봤다.


 처리 방법은 measure-command라는 장치를 이용하면 된다.


 

1
2
3
4
5
6
7
8
bmeasure-command {
    $n=((Get-childItem -File ./*.bmp).name);
    for($i=0; $i -lt $n.length; $i++){
        $obj = $n[$i].Replace(".bmp",".webp");
        cwebp -progress -lossless -short $n[$i] -o ./WebP/$obj;
    }
}
 
cs


 이렇게 사용을 하면, webp에 대해서 시간을 측정 할 수 있게 된다.


 현재 포토스에 자동으로 올리는 장치가 없는지도 확인하는 중이다.

Posted by JunkMam
,

 webp을 이용한 quality가 10~100에서도 BMP으로 설정할 경우. 이상없이 처리가 되었다. 라는 특징을 갖는다.


 웃긴건 webp -lossless로 하거나 png가 webp -q 10~100에서 가장 용량이 적게 먹었다는 점이다.


 이걸 이용한다면, 엄청나게 변형이 되지 않는 한에서(MP4나 그런 동영상에서는 변형되었을때, 완전히 효과가 없어져버렸어 동영상으로는 관리를 할 수가 없다.)


 Paperbak을 분석해서 대량의 파일을 읽고, 처리할 수 있게 만들어야 될 것이다.


 그 외에도 BMP으로 되어 있는 데이터 정보를 PNG나 JPEG로 변형을 가능하다면, 이걸 이용해서 이미지로 데이터를 저장 시킬 수 있게된다.


 최대 300DPI로 저장을 하는 것으로 현재는 데이터가 별로 효과적이지 않다. 라는 것이 있다.


 일단, 변형을 했어도 이상 없다. 라는게 결과적이다.(이미지 압축에서 변형이다.)


 그리고 파일을 Split(잘라내기)가 150~200MByte 이내이면, 얼마든지 제작이 가능하다.(33.5GB가 되는 파일을 제작해서 이상 없음도 확인되었다.)


 paperbak의 소스를 보고 분석해야 될 것이다.


 paperbak에 지원되는 것은 CRYPTO와 BZip의 라이브러리를 이용해서 제작이 되어 있다.


 paperbak의 과정은


 BZip을 이용해서 압축시키고, 그 결과물을 BitMap에 적용시킨다.


 256색인 BMP파일을 만들어지게 되지만, 검은색+흰색의 구조이기 때문에, 문제가 없다.


paperbak.h는 paperbak이 제대로 작동되기 위한 구조체 및 함수를 정의되어 있다.


 Main.cpp는 WinMain으로 컨트롤과 주로 작동되는 현상을 정의된 소스이다.


 Fileproc.cpp는 BitMap을 만드는 과정.


 Printer.cpp는 파일을 그림파일로 변형시키는 용도이다.


 Crc16.cpp는 정보의 오류를 확인하고 처리하는 CRC16 소스이다.


 Controls.cpp는 버튼등을 처리하는 것이다.


 Decoder.cpp는 BitMap을 파일로 변형하는 것이다.


 사용법이나, 방식을 공부하고 싶으면, 다음의 사이트를 참조하길 바란다.


 http://ollydbg.de/Paperbak/


 

paperbak-1.10.exe.zip

paperbak-1.10.src.zip



 

Posted by JunkMam
,

 데이터를 많이 관리해야되는 일을 하고 있다.


 포토스 백업용으로 사용할 경우에는 인코딩을 하고 있어서 완전한 원본을 관리할 수 없다는 단점을 가질 수 있다.


 그래서 실험을 하고자한다.(단, 규약을 읽지 않았기 때문에, 규약에서 문제를 만날 수 있다. 그러므로 실험이 이렇게 되었다. 라고 생각할 것. 따라할 경우 피해는 책임을 지지 않는다.)


 실험에 사용하는 것은 2가지이다.


 paperbak과 구글 포토스이다.


 paperbak이란, 예전에 포스팅한 종이에 데이터를 백업하는 QR코드와 유사한 장치라고 했었다.


 링크 : http://jihadw.tistory.com/74


 paperbak 1.1에서 최대 150MByte의 데이터를 종이(인쇄) 및 BMP으로 출력하는 방법이 제공된다.


 종이 인쇄를 한다면, 약 1100장 가량이 사용이 되고 있기 때문에 비용이 엄청나게 든다.(엄청 비용이 비싸게 든다고 생각하면 된다.)


 그 다음은 BMP으로 파일로 출력이 된다.

 하지만, 여기서 파일이 BMP으로 저장이 되어 있기 때문에 용량이 오히려 많이 들게 되어 있다.


 내가 실험으로 사용할 것은 BMP으로 저장하는 것이다.


 구글 포토스에서 올려도 BMP은 변형이 되어서 저장이 되는 걸로 알고 있는데, 정확하게는 더 자세히 연습할려고 한다.


 현재는 이상 없이작동이 되어 있다.


 구글 포토스에 백업용으로 작업을 해야겠다.


 현재, 연습할것은 2



 여기서, 272MByte에서 적용을 하는 것이 따른것이다.


 현재, 구글 포토스에 올려서 문제가 없는지, 어떻게 복구가 되는지를 확인 할려고 한다.(참고로 1100장 가량이 되어서 이것을 여러개로 출력할 수 있게 생각을 해봐야 될 것 같다.)


 이게 성공되면, 구글 포토스 약관을 보고 이용할려고 한다.(아직 실험이 완료된게 아니므로 따라하지 말 것.)

Posted by JunkMam
,

 MonkeyRunner을 이용해서 이미지를 분석할 수 있는데.(속도면에서 엄청 늦은 경우가 존재한다.)

 이것을 이용하기 위해서는 부분적으로 사진(이미지)을 잘라내서 사용하는 방법을 알아야 될 것이다.


 그래서 SubImage을 사용하는 방법을 작성하고자 한다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.awt.image.BufferedImage;
 
import com.android.chimpchat.adb.AdbBackend;
import com.android.chimpchat.core.IChimpDevice;
import com.android.chimpchat.core.IChimpImage;
 
import com.android.chimpchat.adb.AdbChimpDevice;
 
import com.android.chimpchat.core.ChimpImageBase;
 
public class MonkeyTest {
    public static void main(String[] args) {
        
        IChimpDevice device = null;
        
        try
        {
            // sdk/platform-tools has to be in PATH env variable in order to find adb
            device = new AdbBackend().waitForConnection();            
        }
        catch(java.lang.NullPointerException e)
        {
            System.out.println("Error");
            System.exit(-1);
        }
        
        // Print Device Name
        System.out.println(device.getProperty("build.model"));
 
        // Take a snapshot and save to out.png
        IChimpImage subImage = device.takeSnapshot().getSubImage(4040250250);
        subImage.writeToFile("out.png""png");
        
        device.dispose();
        
        System.exit(0);
    }
}
cs



 여기서 getSubImage는


 x위치, y위치, 넓이, 높이 이런 순으로 작성하면 된다.


 단, 여기서 생성되는 사각형이 현재 이미지의 전체의 위치로 옮겨 가면 안된다.


 예을 들어서 가로 100, 세로 100인 이미지에서 x위치 99에 넓이 100 이렇게 하면, 오작동이 일어나게 된다.

Posted by JunkMam
,

 안드로이드 스튜디오 설치 방법.


 안드로이드 스튜디오 설치 방법은 구글에 제공하는 developer 사이트에 가면 된다.

 링크 : https://developer.android.com/index.html


 여기서, 안드로이드 스튜디오를 전체다 설치해도 되고.

 안드로이드 SDK만 다운 받은 후 컴파일 하는 방법도 된다.(여기서 컴파일할려면, tools을 사용하는 방법을 연습해야된다.)


 R.java

 MainActivity.xml 등 기본적으로 만들어지는 것을 프로그래머 자신이 스스로 만들려면, 어려움이 존재한다.


 그래서 안드로이드 스튜디오를 설치하는 것을 추천한다.(IDE를 무조건 가지고와서 사용하는 것은 어리석은 짓이니. IDE에 구성 요소는 알고 하는게 좋다.)


 안드로이드 스튜디오의 구성은 다음과 같다.


 Java+Android SDK


 이 두개를 간단하게 컨트롤 할 수 있게 하는게 안드로이드 스튜디오이다.


 그래서 Java를 먼저 설치해줘야 된다.


 Java는 Sun사에서 만들어졌는데, Sun사가 Oracle에 인수되면서 Oracle에서 Java를 설치할 수 있게 되었다.(이로 인해서 Oracle과 Google의 법정 다툼도 생겼던건...)


 링크 : http://www.oracle.com/technetwork/java/javase/downloads/index.html


 여기서 JDK(Java Developer Kit)을 설치하면 된다.


 JRE는 자바 실행 환경이기 때문에, 개발용도로 만들려면, JDK을 다운받는게 맞다.

Posted by JunkMam
,

 sameAs라는 메소드가 있고, 그것을 구현하는 내용을 한번 작성해봤다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.awt.image.BufferedImage;
 
import com.android.chimpchat.adb.AdbBackend;
import com.android.chimpchat.core.IChimpDevice;
import com.android.chimpchat.core.IChimpImage;
 
import com.android.chimpchat.adb.AdbChimpDevice;
 
import com.android.chimpchat.core.ChimpImageBase;
 
public class MonkeyTest {
    public static void main(String[] args) {
        
        IChimpDevice device = null;
        
        try
        {
            // sdk/platform-tools has to be in PATH env variable in order to find adb
            device = new AdbBackend().waitForConnection();            
        }
        catch(java.lang.NullPointerException e)
        {
            System.out.println("Error");
            System.exit(-1);
        }
        
        // Print Device Name
        System.out.println(device.getProperty("build.model"));
 
        // Take a snapshot and save to out.png
        //device.takeSnapshot().writeToFile("out.png", "png");
        
        IChimpImage deviceImage = device.takeSnapshot();
        deviceImage.writeToFile("out_1.png""png");
        IChimpImage fileImage = ChimpImageBase.loadImageFromFile("out.png");
        fileImage.writeToFile("out_2.png""png");
        
        sameAs(fileImage,deviceImage,0.9);
        
        if(fileImage.sameAs(deviceImage, 0.75))
        {
            System.out.println("Sames");
        }
        else
        {
            System.out.println("Not");
        }
 
        device.dispose();
        
        System.exit(0);
    }
    
    public static boolean sameAs(IChimpImage other, IChimpImage sames, double percent){
        
        BufferedImage otherImage = other.getBufferedImage();
        BufferedImage samesImage = sames.getBufferedImage();
        
        //Easy size check
        if(otherImage.getWidth()!= samesImage.getWidth()){
            return false;
        }
        
        if(otherImage.getHeight()!=samesImage.getHeight()){
            return false;
        }
        
        int[] otherPixel = new int[1];
        int[] samesPixel = new int[1];
        
        int width = samesImage.getWidth();
        int height = samesImage.getHeight();
        
        int numDiffPixels = 0;
        // Now, go through pixel-by-pixel and check that the images are the same;
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                if (samesImage.getRGB(x, y) != otherImage.getRGB(x, y)) {
                    System.out.println(samesImage.getRGB(x, y)+":"+otherImage.getRGB(x, y));
                    numDiffPixels++;
                }
            }
        }
        double numberPixels = (height * width);
        double diffPercent = numDiffPixels / numberPixels;
        
        return percent <= 1.0 - diffPercent;
    }
}
cs



 하지만, 왜 차이가 생기는지는 잘 모르겠다.


 값이 동일하게 나온 것이라고 생각하는데...


 일단, 이렇게 구현을 할 수 있다면, 특정 위치를 조작해서 처리할 수 있는 방법도 만들 수 있다.

Posted by JunkMam
,

 MonkeyRunner을 연결해서 사용하는 것이 있게 된다.


 여기서, 이미지를 받아 들이고, 이미지를 비교하는 소스를 제작했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import com.android.chimpchat.adb.AdbBackend;
import com.android.chimpchat.core.IChimpDevice;
import com.android.chimpchat.core.IChimpImage;
 
import com.android.chimpchat.adb.AdbChimpDevice;
 
import com.android.chimpchat.core.ChimpImageBase;
 
public class MonkeyTest {
    public static void main(String[] args) {
        
        IChimpDevice device = null;
        
        try
        {
            // sdk/platform-tools has to be in PATH env variable in order to find adb
            device = new AdbBackend().waitForConnection();            
        }
        catch(java.lang.NullPointerException e)
        {
            System.out.println("Error");
            System.exit(-1);
        }
        
        // Print Device Name
        System.out.println(device.getProperty("build.model"));
 
        // Take a snapshot and save to out.png
        //device.takeSnapshot().writeToFile("out.png", "png");
        
        IChimpImage deviceImage = device.takeSnapshot();
        deviceImage.writeToFile("out_1.png""png");
        IChimpImage fileImage = ChimpImageBase.loadImageFromFile("out.png");
        fileImage.writeToFile("out_2.png""png");
        
        if(fileImage.sameAs(deviceImage, 0.75))
        {
            System.out.println("Sames");
        }
        else
        {
            System.out.println("Not");
        }
 
        device.dispose();
        
        System.exit(0);
    }
}
cs


 여기서 sameAs라는 것에서 1.0에 가까우면, 원본이랑 동일하게 보는 것이 맞다. 하지만, 제대로 동작이 안되는 경우가 있다.


 여기서, MonkeyRunner라는 분석이라고하여서 해당 소스를 올린 블로그가 있다.


 참조하면 도움이 될 것이다.


 http://goodtogreate.tistory.com/entry/monkeyrunner%EC%9D%98-%EB%B6%84%EC%84%9D

Posted by JunkMam
,