Manual Image Crop - Version 1.09

Version Description

  • Dutch translation added
  • Better error handling
  • Fixed overwriting of previously saved crops
  • Minor tweaks all around
Download this release

Release Info

Developer tomasz.sita
Plugin Icon 128x128 Manual Image Crop
Version 1.09
Comparing to
See all releases

Code changes from version 1.08 to 1.09

assets/css/jquery.Jcrop.min.css CHANGED
@@ -1,29 +1,165 @@
1
  /* jquery.Jcrop.min.css v0.9.12 (build:20130126) */
2
- .jcrop-holder{direction:ltr;text-align:left;}
3
- .jcrop-vline,.jcrop-hline{background:#FFF url(Jcrop.gif);font-size:0;position:absolute;}
4
- .jcrop-vline{height:100%;width:1px!important;}
5
- .jcrop-vline.right{right:0;}
6
- .jcrop-hline{height:1px!important;width:100%;}
7
- .jcrop-hline.bottom{bottom:0;}
8
- .jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%;}
9
- .jcrop-handle{background-color:#333;border:1px #EEE solid;font-size:1px;height:7px;width:7px;}
10
- .jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0;}
11
- .jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px;}
12
- .jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%;}
13
- .jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%;}
14
- .jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0;}
15
- .jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0;}
16
- .jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0;}
17
- .jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px;}
18
- .jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%;}
19
- .jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px;}
20
- .jcrop-dragbar.ord-n{margin-top:-4px;}
21
- .jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px;}
22
- .jcrop-dragbar.ord-e{margin-right:-4px;right:0;}
23
- .jcrop-dragbar.ord-w{margin-left:-4px;}
24
- .jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline{background:#FFF;filter:alpha(opacity=70)!important;opacity:.70!important;}
25
- .jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#FFF;border-radius:3px;}
26
- .jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important;}
27
- .jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#FFF;border-color:#000;border-radius:3px;}
28
- .solid-line .jcrop-vline,.solid-line .jcrop-hline{background:#FFF;}
29
- .jcrop-holder img,img.jcrop-preview{max-width:none;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* jquery.Jcrop.min.css v0.9.12 (build:20130126) */
2
+ .jcrop-holder {
3
+ direction: ltr;
4
+ text-align: left;
5
+ }
6
+
7
+ .jcrop-vline,.jcrop-hline {
8
+ background: #FFF url(Jcrop.gif);
9
+ font-size: 0;
10
+ position: absolute;
11
+ }
12
+
13
+ .jcrop-vline {
14
+ height: 100%;
15
+ width: 1px !important;
16
+ }
17
+
18
+ .jcrop-vline.right {
19
+ right: 0;
20
+ }
21
+
22
+ .jcrop-hline {
23
+ height: 1px !important;
24
+ width: 100%;
25
+ }
26
+
27
+ .jcrop-hline.bottom {
28
+ bottom: 0;
29
+ }
30
+
31
+ .jcrop-tracker {
32
+ -webkit-tap-highlight-color: transparent;
33
+ -webkit-touch-callout: none;
34
+ -webkit-user-select: none;
35
+ height: 100%;
36
+ width: 100%;
37
+ }
38
+
39
+ .jcrop-handle {
40
+ background-color: #333;
41
+ border: 1px #EEE solid;
42
+ font-size: 1px;
43
+ height: 7px;
44
+ width: 7px;
45
+ }
46
+
47
+ .jcrop-handle.ord-n {
48
+ left: 50%;
49
+ margin-left: -4px;
50
+ margin-top: -4px;
51
+ top: 0;
52
+ }
53
+
54
+ .jcrop-handle.ord-s {
55
+ bottom: 0;
56
+ left: 50%;
57
+ margin-bottom: -4px;
58
+ margin-left: -4px;
59
+ }
60
+
61
+ .jcrop-handle.ord-e {
62
+ margin-right: -4px;
63
+ margin-top: -4px;
64
+ right: 0;
65
+ top: 50%;
66
+ }
67
+
68
+ .jcrop-handle.ord-w {
69
+ left: 0;
70
+ margin-left: -4px;
71
+ margin-top: -4px;
72
+ top: 50%;
73
+ }
74
+
75
+ .jcrop-handle.ord-nw {
76
+ left: 0;
77
+ margin-left: -4px;
78
+ margin-top: -4px;
79
+ top: 0;
80
+ }
81
+
82
+ .jcrop-handle.ord-ne {
83
+ margin-right: -4px;
84
+ margin-top: -4px;
85
+ right: 0;
86
+ top: 0;
87
+ }
88
+
89
+ .jcrop-handle.ord-se {
90
+ bottom: 0;
91
+ margin-bottom: -4px;
92
+ margin-right: -4px;
93
+ right: 0;
94
+ }
95
+
96
+ .jcrop-handle.ord-sw {
97
+ bottom: 0;
98
+ left: 0;
99
+ margin-bottom: -4px;
100
+ margin-left: -4px;
101
+ }
102
+
103
+ .jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s {
104
+ height: 7px;
105
+ width: 100%;
106
+ }
107
+
108
+ .jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w {
109
+ height: 100%;
110
+ width: 7px;
111
+ }
112
+
113
+ .jcrop-dragbar.ord-n {
114
+ margin-top: -4px;
115
+ }
116
+
117
+ .jcrop-dragbar.ord-s {
118
+ bottom: 0;
119
+ margin-bottom: -4px;
120
+ }
121
+
122
+ .jcrop-dragbar.ord-e {
123
+ margin-right: -4px;
124
+ right: 0;
125
+ }
126
+
127
+ .jcrop-dragbar.ord-w {
128
+ margin-left: -4px;
129
+ }
130
+
131
+ .jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline {
132
+ background: #FFF;
133
+ filter: alpha(opacity = 70) !important;
134
+ opacity: .70 !important;
135
+ }
136
+
137
+ .jcrop-light .jcrop-handle {
138
+ -moz-border-radius: 3px;
139
+ -webkit-border-radius: 3px;
140
+ background-color: #000;
141
+ border-color: #FFF;
142
+ border-radius: 3px;
143
+ }
144
+
145
+ .jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline {
146
+ background: #000;
147
+ filter: alpha(opacity = 70) !important;
148
+ opacity: .7 !important;
149
+ }
150
+
151
+ .jcrop-dark .jcrop-handle {
152
+ -moz-border-radius: 3px;
153
+ -webkit-border-radius: 3px;
154
+ background-color: #FFF;
155
+ border-color: #000;
156
+ border-radius: 3px;
157
+ }
158
+
159
+ .solid-line .jcrop-vline,.solid-line .jcrop-hline {
160
+ background: #FFF;
161
+ }
162
+
163
+ .jcrop-holder img,img.jcrop-preview {
164
+ max-width: none;
165
+ }
assets/css/mic-admin.css CHANGED
@@ -1,8 +1,9 @@
1
  #TB_window {
2
  z-index: 260001 !important;
3
  }
 
4
  #TB_overlay {
5
- z-index: 260000 !important;
6
  }
7
 
8
  .mic-editor-wrapper {
@@ -14,6 +15,7 @@
14
  width: 500px;
15
  margin-right: 20px;
16
  }
 
17
  .mic-right-col {
18
  float: left;
19
  width: 400px;
@@ -37,7 +39,7 @@
37
 
38
  #micCropImage {
39
  margin: auto !important;
40
- display: block !important;
41
  border-radius: 0;
42
  }
43
 
@@ -86,7 +88,7 @@
86
  float: left;
87
  width: 100px;
88
  margin-top: 23px;
89
- line-height: 11px;
90
  }
91
 
92
  .mic-editor-wrapper .nav-tab-wrapper {
1
  #TB_window {
2
  z-index: 260001 !important;
3
  }
4
+
5
  #TB_overlay {
6
+ z-index: 260000 !important;
7
  }
8
 
9
  .mic-editor-wrapper {
15
  width: 500px;
16
  margin-right: 20px;
17
  }
18
+
19
  .mic-right-col {
20
  float: left;
21
  width: 400px;
39
 
40
  #micCropImage {
41
  margin: auto !important;
42
+ display: block !important;
43
  border-radius: 0;
44
  }
45
 
88
  float: left;
89
  width: 100px;
90
  margin-top: 23px;
91
+ line-height: 11px;
92
  }
93
 
94
  .mic-editor-wrapper .nav-tab-wrapper {
languages/microp-de_DE.po CHANGED
@@ -1,163 +1,163 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: mic\n"
4
- "POT-Creation-Date: 2014-05-13 22:40-0000\n"
5
- "PO-Revision-Date: 2014-05-13 22:41-0000\n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Generator: Poedit 1.5.7\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SearchPath-0: C:\\wamp\\www\\wordpress\\wp-content\\plugins\\manual-"
15
- "image-crop\n"
16
-
17
- #: manual-image-crop/lib/ManualImageCrop.php:58
18
- msgid "Crop"
19
- msgstr "Ausschnitt"
20
-
21
- #: manual-image-crop/lib/ManualImageCrop.php:67
22
- msgid "Crop featured image"
23
- msgstr "Beitragsbild Ausschneiden"
24
-
25
- #: manual-image-crop/lib/ManualImageCrop.php:94
26
- #: manual-image-crop/lib/ManualImageCrop.php:121
27
- msgid "Crop Image"
28
- msgstr "Bild Ausschneiden"
29
-
30
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:31
31
- msgid "Pick the image size:"
32
- msgstr "Wählen Sie die Bildgröße"
33
-
34
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:41
35
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:115
36
- msgid "Thumbnail"
37
- msgstr "Miniaturbild"
38
-
39
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:42
40
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:116
41
- msgid "Medium"
42
- msgstr "Mittlere Bildgröße"
43
-
44
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:43
45
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:117
46
- msgid "Large"
47
- msgstr "Maximale Bildgröße"
48
-
49
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:44
50
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:118
51
- msgid "Full Size"
52
- msgstr "Ursprünglichen Größe"
53
-
54
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:142
55
- msgid "Original picture dimensions:"
56
- msgstr "Original-Bildabmessungen"
57
-
58
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
59
- msgid "Target picture dimensions:"
60
- msgstr "Zielbildabmessungen"
61
-
62
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
63
- msgid "Soft proportional crop mode"
64
- msgstr "Soft proportional Ausschnitt Modus"
65
-
66
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
67
- msgid "Hard crop mode"
68
- msgstr "Fest Ausschnitt Modus"
69
-
70
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:147
71
- msgid "New image:"
72
- msgstr "Neue Bild"
73
-
74
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:154
75
- msgid "Previous image:"
76
- msgstr "Vorheriges Bild"
77
-
78
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:162
79
- msgid "Crop it!"
80
- msgstr "Ausschneiden!"
81
-
82
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:169
83
- msgid "Target JPEG Quality"
84
- msgstr "Ziel JPEG-Qualität"
85
-
86
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:170
87
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:154
88
- msgid "100 (best quality, biggest file)"
89
- msgstr "100 (beste Qualität, größte Datei)"
90
-
91
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:171
92
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:155
93
- msgid "80 (very high quality)"
94
- msgstr "80 (sehr hoher Qualität)"
95
-
96
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:172
97
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:156
98
- msgid "70 (high quality)"
99
- msgstr "70 (hoher Qualität)"
100
-
101
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:173
102
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:157
103
- msgid "60 (good)"
104
- msgstr "60 (gute Qualität)"
105
-
106
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:174
107
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:158
108
- msgid "50 (average)"
109
- msgstr "50 (mittelmäßige Qualität)"
110
-
111
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:175
112
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:159
113
- msgid "30 (low)"
114
- msgstr "30 (niedrige Qualität)"
115
-
116
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:176
117
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:160
118
- msgid "10 (very low, smallest file)"
119
- msgstr "10 (sehr geringe Qualität)"
120
-
121
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:183
122
- msgid "Generate Retina/HiDPI (@2x):"
123
- msgstr "Retina/HiDPI (@2x) erzeugen"
124
-
125
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:188
126
- msgid "The image has been cropped successfully"
127
- msgstr "Das Bild wurde erfolgreich abgeschnitten worden"
128
-
129
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:189
130
- msgid "An Error has occured. Please try again or contact plugin's author."
131
- msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut oder Kontaktdaten Plugin Autor"
132
-
133
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:232
134
- msgid "Compatible"
135
- msgstr "Kompatibel"
136
-
137
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:234
138
- msgid "Source too small"
139
- msgstr "Ursprung bild zu klein"
140
-
141
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:125
142
- msgid "Size"
143
- msgstr "Größe"
144
-
145
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:126
146
- msgid "Visible"
147
- msgstr "Sichtbar"
148
-
149
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:127
150
- msgid "Default JPEG Quality"
151
- msgstr "Standard JPEG-Qualität"
152
-
153
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:128
154
- msgid "Custom Label"
155
- msgstr "angepasst Beschriftung"
156
-
157
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:150
158
- msgid "Yes"
159
- msgstr "Ja"
160
-
161
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:151
162
- msgid "No"
163
- msgstr "Nein"
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: mic\n"
4
+ "POT-Creation-Date: 2014-05-13 22:40-0000\n"
5
+ "PO-Revision-Date: 2014-05-13 22:41-0000\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.5.7\n"
12
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
+ "X-Poedit-Basepath: .\n"
14
+ "X-Poedit-SearchPath-0: C:\\wamp\\www\\wordpress\\wp-content\\plugins\\manual-"
15
+ "image-crop\n"
16
+
17
+ #: manual-image-crop/lib/ManualImageCrop.php:58
18
+ msgid "Crop"
19
+ msgstr "Ausschnitt"
20
+
21
+ #: manual-image-crop/lib/ManualImageCrop.php:67
22
+ msgid "Crop featured image"
23
+ msgstr "Beitragsbild Ausschneiden"
24
+
25
+ #: manual-image-crop/lib/ManualImageCrop.php:94
26
+ #: manual-image-crop/lib/ManualImageCrop.php:121
27
+ msgid "Crop Image"
28
+ msgstr "Bild Ausschneiden"
29
+
30
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:31
31
+ msgid "Pick the image size:"
32
+ msgstr "Wählen Sie die Bildgröße"
33
+
34
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:41
35
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:115
36
+ msgid "Thumbnail"
37
+ msgstr "Miniaturbild"
38
+
39
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:42
40
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:116
41
+ msgid "Medium"
42
+ msgstr "Mittlere Bildgröße"
43
+
44
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:43
45
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:117
46
+ msgid "Large"
47
+ msgstr "Maximale Bildgröße"
48
+
49
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:44
50
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:118
51
+ msgid "Full Size"
52
+ msgstr "Ursprünglichen Größe"
53
+
54
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:142
55
+ msgid "Original picture dimensions:"
56
+ msgstr "Original-Bildabmessungen"
57
+
58
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
59
+ msgid "Target picture dimensions:"
60
+ msgstr "Zielbildabmessungen"
61
+
62
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
63
+ msgid "Soft proportional crop mode"
64
+ msgstr "Soft proportional Ausschnitt Modus"
65
+
66
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
67
+ msgid "Hard crop mode"
68
+ msgstr "Fest Ausschnitt Modus"
69
+
70
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:147
71
+ msgid "New image:"
72
+ msgstr "Neue Bild"
73
+
74
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:154
75
+ msgid "Previous image:"
76
+ msgstr "Vorheriges Bild"
77
+
78
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:162
79
+ msgid "Crop it!"
80
+ msgstr "Ausschneiden!"
81
+
82
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:169
83
+ msgid "Target JPEG Quality"
84
+ msgstr "Ziel JPEG-Qualität"
85
+
86
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:170
87
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:154
88
+ msgid "100 (best quality, biggest file)"
89
+ msgstr "100 (beste Qualität, größte Datei)"
90
+
91
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:171
92
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:155
93
+ msgid "80 (very high quality)"
94
+ msgstr "80 (sehr hoher Qualität)"
95
+
96
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:172
97
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:156
98
+ msgid "70 (high quality)"
99
+ msgstr "70 (hoher Qualität)"
100
+
101
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:173
102
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:157
103
+ msgid "60 (good)"
104
+ msgstr "60 (gute Qualität)"
105
+
106
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:174
107
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:158
108
+ msgid "50 (average)"
109
+ msgstr "50 (mittelmäßige Qualität)"
110
+
111
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:175
112
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:159
113
+ msgid "30 (low)"
114
+ msgstr "30 (niedrige Qualität)"
115
+
116
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:176
117
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:160
118
+ msgid "10 (very low, smallest file)"
119
+ msgstr "10 (sehr geringe Qualität)"
120
+
121
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:183
122
+ msgid "Generate Retina/HiDPI (@2x):"
123
+ msgstr "Retina/HiDPI (@2x) erzeugen"
124
+
125
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:188
126
+ msgid "The image has been cropped successfully"
127
+ msgstr "Das Bild wurde erfolgreich abgeschnitten worden"
128
+
129
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:189
130
+ msgid "An Error has occured. Please try again or contact plugin's author."
131
+ msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut oder Kontaktdaten Plugin Autor"
132
+
133
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:232
134
+ msgid "Compatible"
135
+ msgstr "Kompatibel"
136
+
137
+ #: manual-image-crop/lib/ManualImageCropEditorWindow.php:234
138
+ msgid "Source too small"
139
+ msgstr "Ursprung bild zu klein"
140
+
141
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:125
142
+ msgid "Size"
143
+ msgstr "Größe"
144
+
145
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:126
146
+ msgid "Visible"
147
+ msgstr "Sichtbar"
148
+
149
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:127
150
+ msgid "Default JPEG Quality"
151
+ msgstr "Standard JPEG-Qualität"
152
+
153
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:128
154
+ msgid "Custom Label"
155
+ msgstr "angepasst Beschriftung"
156
+
157
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:150
158
+ msgid "Yes"
159
+ msgstr "Ja"
160
+
161
+ #: manual-image-crop/lib/ManualImageCropSettingsPage.php:151
162
+ msgid "No"
163
+ msgstr "Nein"
languages/microp-nl_NL.mo ADDED
Binary file
languages/microp-nl_NL.po ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Manual Image Crop\n"
4
+ "POT-Creation-Date: 2015-05-01 00:50+0100\n"
5
+ "PO-Revision-Date: 2015-05-06 17:17+0100\n"
6
+ "Last-Translator: Bernardo Hulsman <b.hulsman@tripix.nl>\n"
7
+ "Language-Team: \n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.7.6\n"
12
+ "X-Poedit-Basepath: D:\\Programy\\xampp\\apps\\wordpress\\htdocs\\wp-content"
13
+ "\\plugins\\manual-image-crop\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: _e;__\n"
16
+ "Language: nl_NL\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: manual-image-crop.php:5
20
+ msgid ""
21
+ "Plugin allows you to manually crop all the image sizes registered in your "
22
+ "WordPress theme (in particular featured image). Simply click on the \"Crop\" "
23
+ "link next to any image in your media library and select the area of the "
24
+ "image you want to crop."
25
+ msgstr ""
26
+ "Met deze plugin kun je handmatig de in je WordPress thema geregistreerde "
27
+ "afbeeldingsgroottes bijsnijden. Klik simpelweg op 'Bijsnijden' naast de "
28
+ "afbeelding in de mediabibliotheek, of naast een uitgelichte afbeelding en "
29
+ "selecteer het gedeelte van de afbeelding dat je wil bijsnijden."
30
+
31
+ #: lib/ManualImageCrop.php:58
32
+ msgid "Crop"
33
+ msgstr "Bijsnijden"
34
+
35
+ #: lib/ManualImageCrop.php:67 lib/ManualImageCrop.php:94
36
+ #: lib/ManualImageCrop.php:104 lib/ManualImageCrop.php:131
37
+ #: lib/ManualImageCropSettingsPage.php:45
38
+ #: lib/ManualImageCropSettingsPage.php:46 manual-image-crop.php:3
39
+ msgid "Manual Image Crop"
40
+ msgstr "Manual Image Crop"
41
+
42
+ #: lib/ManualImageCrop.php:67
43
+ msgid "Crop featured image"
44
+ msgstr "Uitgelichte afbeelding bijsnijden"
45
+
46
+ #: lib/ManualImageCrop.php:94 lib/ManualImageCrop.php:104
47
+ #: lib/ManualImageCrop.php:131
48
+ msgid "Crop Image"
49
+ msgstr "Afbeelding bijsnijden"
50
+
51
+ #: lib/ManualImageCropEditorWindow.php:30
52
+ msgid "Pick the image size:"
53
+ msgstr "Kies een afmeting"
54
+
55
+ #: lib/ManualImageCropEditorWindow.php:40
56
+ #: lib/ManualImageCropSettingsPage.php:133
57
+ msgid "Thumbnail"
58
+ msgstr "Thumbnail"
59
+
60
+ #: lib/ManualImageCropEditorWindow.php:41
61
+ #: lib/ManualImageCropSettingsPage.php:134
62
+ msgid "Medium"
63
+ msgstr "Gemiddeld"
64
+
65
+ #: lib/ManualImageCropEditorWindow.php:42
66
+ #: lib/ManualImageCropSettingsPage.php:135
67
+ msgid "Large"
68
+ msgstr "Groot"
69
+
70
+ #: lib/ManualImageCropEditorWindow.php:43
71
+ #: lib/ManualImageCropSettingsPage.php:136
72
+ msgid "Full Size"
73
+ msgstr "Volledige grootte"
74
+
75
+ #: lib/ManualImageCropEditorWindow.php:151
76
+ msgid "Original picture dimensions:"
77
+ msgstr "Oorspronkelijke afmeting:"
78
+
79
+ #: lib/ManualImageCropEditorWindow.php:152
80
+ msgid "Target picture dimensions:"
81
+ msgstr "Nieuwe afmeting:"
82
+
83
+ #: lib/ManualImageCropEditorWindow.php:156
84
+ msgid "Soft proportional crop mode"
85
+ msgstr "soft crop"
86
+
87
+ #: lib/ManualImageCropEditorWindow.php:156
88
+ msgid "Hard crop mode"
89
+ msgstr "hard crop"
90
+
91
+ #: lib/ManualImageCropEditorWindow.php:160
92
+ msgid "New image:"
93
+ msgstr "Nieuwe afbeelding:"
94
+
95
+ #: lib/ManualImageCropEditorWindow.php:167
96
+ msgid "Previous image:"
97
+ msgstr "Vorige afbeelding:"
98
+
99
+ #: lib/ManualImageCropEditorWindow.php:175
100
+ msgid "Crop it!"
101
+ msgstr "Bijsnijden!"
102
+
103
+ #: lib/ManualImageCropEditorWindow.php:182
104
+ msgid "Target JPEG Quality"
105
+ msgstr "JPEG kwaliteit"
106
+
107
+ #: lib/ManualImageCropEditorWindow.php:183
108
+ #: lib/ManualImageCropSettingsPage.php:172
109
+ msgid "100 (best quality, biggest file)"
110
+ msgstr "100 (hoogste kwaliteit, grootste bestand)"
111
+
112
+ #: lib/ManualImageCropEditorWindow.php:184
113
+ #: lib/ManualImageCropSettingsPage.php:173
114
+ msgid "80 (very high quality)"
115
+ msgstr "80 (zeer hoge kwaliteit)"
116
+
117
+ #: lib/ManualImageCropEditorWindow.php:185
118
+ #: lib/ManualImageCropSettingsPage.php:174
119
+ msgid "70 (high quality)"
120
+ msgstr "70 (hoge kwaliteit)"
121
+
122
+ #: lib/ManualImageCropEditorWindow.php:186
123
+ #: lib/ManualImageCropSettingsPage.php:175
124
+ msgid "60 (good)"
125
+ msgstr "60 (goede kwaliteit)"
126
+
127
+ #: lib/ManualImageCropEditorWindow.php:187
128
+ #: lib/ManualImageCropSettingsPage.php:176
129
+ msgid "50 (average)"
130
+ msgstr "50 (gemiddelde kwaliteit)"
131
+
132
+ #: lib/ManualImageCropEditorWindow.php:188
133
+ #: lib/ManualImageCropSettingsPage.php:177
134
+ msgid "30 (low)"
135
+ msgstr "30 (lage kwaliteit)"
136
+
137
+ #: lib/ManualImageCropEditorWindow.php:189
138
+ #: lib/ManualImageCropSettingsPage.php:178
139
+ msgid "10 (very low, smallest file)"
140
+ msgstr "10 (zeer lage kwaliteit, kleinste bestand)"
141
+
142
+ #: lib/ManualImageCropEditorWindow.php:196
143
+ msgid "Generate Retina/HiDPI (@2x):"
144
+ msgstr "Genereer Retina/HiDPI (@2x):"
145
+
146
+ #: lib/ManualImageCropEditorWindow.php:201
147
+ msgid "The image has been cropped successfully"
148
+ msgstr "De afbeelding is succesvol bijgesneden"
149
+
150
+ #: lib/ManualImageCropEditorWindow.php:202
151
+ msgid "An Error has occured. Please try again or contact plugin's author."
152
+ msgstr ""
153
+ "Er heeft zich een fout voorgedaan! Probeer het nog eens of neem contact op "
154
+ "met de maker van de plugin."
155
+
156
+ #: lib/ManualImageCropEditorWindow.php:245
157
+ msgid "Compatible"
158
+ msgstr "Geschikt"
159
+
160
+ #: lib/ManualImageCropEditorWindow.php:247
161
+ msgid "Source too small"
162
+ msgstr "Bronbestand te klein"
163
+
164
+ #: lib/ManualImageCropSettingsPage.php:61
165
+ msgid "Manual Image Crop Settings"
166
+ msgstr "Manual Image Crop instellingen"
167
+
168
+ #: lib/ManualImageCropSettingsPage.php:87
169
+ msgid "Mic Custom Settings"
170
+ msgstr "Aangepaste instellingen"
171
+
172
+ #: lib/ManualImageCropSettingsPage.php:94
173
+ msgid "Crop sizes settings"
174
+ msgstr "Afbeeldingsgrootte instellingen"
175
+
176
+ #: lib/ManualImageCropSettingsPage.php:120
177
+ msgid "Enter your settings below:"
178
+ msgstr "Pas hieronder de instellingen aan:"
179
+
180
+ #: lib/ManualImageCropSettingsPage.php:143
181
+ msgid "Size"
182
+ msgstr "Afmeting"
183
+
184
+ #: lib/ManualImageCropSettingsPage.php:144
185
+ msgid "Visible"
186
+ msgstr "Zichtbaar"
187
+
188
+ #: lib/ManualImageCropSettingsPage.php:145
189
+ msgid "Default JPEG Quality"
190
+ msgstr "Standaard JPEG kwaliteit"
191
+
192
+ #: lib/ManualImageCropSettingsPage.php:146
193
+ msgid "Custom Label"
194
+ msgstr "Aangepast label"
195
+
196
+ #: lib/ManualImageCropSettingsPage.php:168
197
+ msgid "Yes"
198
+ msgstr "Ja"
199
+
200
+ #: lib/ManualImageCropSettingsPage.php:169
201
+ msgid "No"
202
+ msgstr "Nee"
languages/microp-pl_PL.mo CHANGED
Binary file
languages/microp-pl_PL.po CHANGED
@@ -1,163 +1,199 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: mic\n"
4
- "POT-Creation-Date: 2014-05-13 22:40-0000\n"
5
- "PO-Revision-Date: 2014-05-13 22:41-0000\n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Generator: Poedit 1.5.7\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SearchPath-0: C:\\wamp\\www\\wordpress\\wp-content\\plugins\\manual-"
15
- "image-crop\n"
16
-
17
- #: manual-image-crop/lib/ManualImageCrop.php:58
18
- msgid "Crop"
19
- msgstr "Kadruj"
20
-
21
- #: manual-image-crop/lib/ManualImageCrop.php:67
22
- msgid "Crop featured image"
23
- msgstr "Kadruj główny obrazek"
24
-
25
- #: manual-image-crop/lib/ManualImageCrop.php:94
26
- #: manual-image-crop/lib/ManualImageCrop.php:121
27
- msgid "Crop Image"
28
- msgstr "Kadruj zdjęcie"
29
-
30
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:31
31
- msgid "Pick the image size:"
32
- msgstr "Wybierz rozmiar zdjęcia:"
33
-
34
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:41
35
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:115
36
- msgid "Thumbnail"
37
- msgstr "Miniatura"
38
-
39
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:42
40
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:116
41
- msgid "Medium"
42
- msgstr "Średnie"
43
-
44
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:43
45
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:117
46
- msgid "Large"
47
- msgstr "Duże"
48
-
49
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:44
50
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:118
51
- msgid "Full Size"
52
- msgstr "Pełny rozmiar"
53
-
54
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:142
55
- msgid "Original picture dimensions:"
56
- msgstr "Oryginalne wymiary:"
57
-
58
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
59
- msgid "Target picture dimensions:"
60
- msgstr "Docelowe wymairy:"
61
-
62
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
63
- msgid "Soft proportional crop mode"
64
- msgstr "Kadrowanie proporcjonalne"
65
-
66
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:143
67
- msgid "Hard crop mode"
68
- msgstr "Kadrowanie sztywne"
69
-
70
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:147
71
- msgid "New image:"
72
- msgstr "Nowe zdjęcie:"
73
-
74
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:154
75
- msgid "Previous image:"
76
- msgstr "Poprzednie zdjęcie:"
77
-
78
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:162
79
- msgid "Crop it!"
80
- msgstr "Kadruj!"
81
-
82
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:169
83
- msgid "Target JPEG Quality"
84
- msgstr "Jakość JPEG"
85
-
86
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:170
87
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:154
88
- msgid "100 (best quality, biggest file)"
89
- msgstr "100 (najlepsza jakość, największy plik)"
90
-
91
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:171
92
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:155
93
- msgid "80 (very high quality)"
94
- msgstr "80 (wyśmienita jakość)"
95
-
96
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:172
97
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:156
98
- msgid "70 (high quality)"
99
- msgstr "70 (bardzo wysoka jakość)"
100
-
101
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:173
102
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:157
103
- msgid "60 (good)"
104
- msgstr "60 (wysoka jakość)"
105
-
106
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:174
107
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:158
108
- msgid "50 (average)"
109
- msgstr "50 (średnia jakość)"
110
-
111
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:175
112
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:159
113
- msgid "30 (low)"
114
- msgstr "30 (niska jakość)"
115
-
116
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:176
117
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:160
118
- msgid "10 (very low, smallest file)"
119
- msgstr "10 (bardzo niska jakość)"
120
-
121
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:183
122
- msgid "Generate Retina/HiDPI (@2x):"
123
- msgstr "Wygeneruj Retina/HiDPI (@2x)"
124
-
125
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:188
126
- msgid "The image has been cropped successfully"
127
- msgstr "Zdjęcie zostało wykadrowane"
128
-
129
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:189
130
- msgid "An Error has occured. Please try again or contact plugin's author."
131
- msgstr "Wystąpił błąd, spróbuj ponownie lub skontaktuj się z autorem wtyczki"
132
-
133
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:232
134
- msgid "Compatible"
135
- msgstr "Kompatybilne"
136
-
137
- #: manual-image-crop/lib/ManualImageCropEditorWindow.php:234
138
- msgid "Source too small"
139
- msgstr "Zbyt małe zdjecie wejściowe"
140
-
141
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:125
142
- msgid "Size"
143
- msgstr "Rozmiar"
144
-
145
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:126
146
- msgid "Visible"
147
- msgstr "Widoczny"
148
-
149
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:127
150
- msgid "Default JPEG Quality"
151
- msgstr "Domyślna jakość JPEG"
152
-
153
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:128
154
- msgid "Custom Label"
155
- msgstr "Niestandardowa etykieta"
156
-
157
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:150
158
- msgid "Yes"
159
- msgstr "Tak"
160
-
161
- #: manual-image-crop/lib/ManualImageCropSettingsPage.php:151
162
- msgid "No"
163
- msgstr "Nie"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: mic\n"
4
+ "POT-Creation-Date: 2015-05-01 00:50+0100\n"
5
+ "PO-Revision-Date: 2015-05-01 00:58+0100\n"
6
+ "Last-Translator: Maciej Gryniuk <maciejka45@gmail.com>\n"
7
+ "Language-Team: \n"
8
+ "Language: pl_PL\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.8beta1\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SearchPath-0: C:\\wamp\\www\\wordpress\\wp-content\\plugins\\manual-"
16
+ "image-crop\n"
17
+
18
+ #: manual-image-crop.php:5
19
+ msgid ""
20
+ "Plugin allows you to manually crop all the image sizes registered in your "
21
+ "WordPress theme (in particular featured image). Simply click on the \"Crop\" "
22
+ "link next to any image in your media library and select the area of the "
23
+ "image you want to crop."
24
+ msgstr ""
25
+ "Wtyczka umożliwiająca ręczne przycięcie wszystkich rozmiarów obrazków "
26
+ "zarejestrowanych w szablonie WordPress (oraz po części obrazka "
27
+ "wyróżniającego). Po prostu naciśnij na odnośnik \"Przytnij\" obok obrazka w "
28
+ "bibliotece medium i wybierz obszar obrazka, który chcesz przyciąć."
29
+
30
+ #: lib/ManualImageCrop.php:58
31
+ msgid "Crop"
32
+ msgstr "Kadruj"
33
+
34
+ #: lib/ManualImageCrop.php:67 lib/ManualImageCrop.php:94
35
+ #: lib/ManualImageCrop.php:104 lib/ManualImageCrop.php:131
36
+ #: lib/ManualImageCropSettingsPage.php:45
37
+ #: lib/ManualImageCropSettingsPage.php:46 manual-image-crop.php:3
38
+ msgid "Manual Image Crop"
39
+ msgstr "Ręczne przycinanie obrazków"
40
+
41
+ #: lib/ManualImageCrop.php:67
42
+ msgid "Crop featured image"
43
+ msgstr "Kadruj główny obrazek"
44
+
45
+ #: lib/ManualImageCrop.php:94 lib/ManualImageCrop.php:104
46
+ #: lib/ManualImageCrop.php:131
47
+ msgid "Crop Image"
48
+ msgstr "Kadruj zdjęcie"
49
+
50
+ #: lib/ManualImageCropEditorWindow.php:30
51
+ msgid "Pick the image size:"
52
+ msgstr "Wybierz rozmiar zdjęcia:"
53
+
54
+ #: lib/ManualImageCropEditorWindow.php:40
55
+ #: lib/ManualImageCropSettingsPage.php:133
56
+ msgid "Thumbnail"
57
+ msgstr "Miniatura"
58
+
59
+ #: lib/ManualImageCropEditorWindow.php:41
60
+ #: lib/ManualImageCropSettingsPage.php:134
61
+ msgid "Medium"
62
+ msgstr "Średnie"
63
+
64
+ #: lib/ManualImageCropEditorWindow.php:42
65
+ #: lib/ManualImageCropSettingsPage.php:135
66
+ msgid "Large"
67
+ msgstr "Duże"
68
+
69
+ #: lib/ManualImageCropEditorWindow.php:43
70
+ #: lib/ManualImageCropSettingsPage.php:136
71
+ msgid "Full Size"
72
+ msgstr "Pełny rozmiar"
73
+
74
+ #: lib/ManualImageCropEditorWindow.php:151
75
+ msgid "Original picture dimensions:"
76
+ msgstr "Oryginalne wymiary:"
77
+
78
+ #: lib/ManualImageCropEditorWindow.php:152
79
+ msgid "Target picture dimensions:"
80
+ msgstr "Docelowe wymairy:"
81
+
82
+ #: lib/ManualImageCropEditorWindow.php:156
83
+ msgid "Soft proportional crop mode"
84
+ msgstr "Kadrowanie proporcjonalne"
85
+
86
+ #: lib/ManualImageCropEditorWindow.php:156
87
+ msgid "Hard crop mode"
88
+ msgstr "Kadrowanie sztywne"
89
+
90
+ #: lib/ManualImageCropEditorWindow.php:160
91
+ msgid "New image:"
92
+ msgstr "Nowe zdjęcie:"
93
+
94
+ #: lib/ManualImageCropEditorWindow.php:167
95
+ msgid "Previous image:"
96
+ msgstr "Poprzednie zdjęcie:"
97
+
98
+ #: lib/ManualImageCropEditorWindow.php:175
99
+ msgid "Crop it!"
100
+ msgstr "Kadruj!"
101
+
102
+ #: lib/ManualImageCropEditorWindow.php:182
103
+ msgid "Target JPEG Quality"
104
+ msgstr "Jakość JPEG"
105
+
106
+ #: lib/ManualImageCropEditorWindow.php:183
107
+ #: lib/ManualImageCropSettingsPage.php:172
108
+ msgid "100 (best quality, biggest file)"
109
+ msgstr "100 (najlepsza jakość, największy plik)"
110
+
111
+ #: lib/ManualImageCropEditorWindow.php:184
112
+ #: lib/ManualImageCropSettingsPage.php:173
113
+ msgid "80 (very high quality)"
114
+ msgstr "80 (wyśmienita jakość)"
115
+
116
+ #: lib/ManualImageCropEditorWindow.php:185
117
+ #: lib/ManualImageCropSettingsPage.php:174
118
+ msgid "70 (high quality)"
119
+ msgstr "70 (bardzo wysoka jakość)"
120
+
121
+ #: lib/ManualImageCropEditorWindow.php:186
122
+ #: lib/ManualImageCropSettingsPage.php:175
123
+ msgid "60 (good)"
124
+ msgstr "60 (wysoka jakość)"
125
+
126
+ #: lib/ManualImageCropEditorWindow.php:187
127
+ #: lib/ManualImageCropSettingsPage.php:176
128
+ msgid "50 (average)"
129
+ msgstr "50 (średnia jakość)"
130
+
131
+ #: lib/ManualImageCropEditorWindow.php:188
132
+ #: lib/ManualImageCropSettingsPage.php:177
133
+ msgid "30 (low)"
134
+ msgstr "30 (niska jakość)"
135
+
136
+ #: lib/ManualImageCropEditorWindow.php:189
137
+ #: lib/ManualImageCropSettingsPage.php:178
138
+ msgid "10 (very low, smallest file)"
139
+ msgstr "10 (bardzo niska jakość)"
140
+
141
+ #: lib/ManualImageCropEditorWindow.php:196
142
+ msgid "Generate Retina/HiDPI (@2x):"
143
+ msgstr "Wygeneruj Retina/HiDPI (@2x)"
144
+
145
+ #: lib/ManualImageCropEditorWindow.php:201
146
+ msgid "The image has been cropped successfully"
147
+ msgstr "Zdjęcie zostało wykadrowane"
148
+
149
+ #: lib/ManualImageCropEditorWindow.php:202
150
+ msgid "An Error has occured. Please try again or contact plugin's author."
151
+ msgstr "Wystąpił błąd, spróbuj ponownie lub skontaktuj się z autorem wtyczki"
152
+
153
+ #: lib/ManualImageCropEditorWindow.php:245
154
+ msgid "Compatible"
155
+ msgstr "Kompatybilne"
156
+
157
+ #: lib/ManualImageCropEditorWindow.php:247
158
+ msgid "Source too small"
159
+ msgstr "Zbyt małe zdjecie wejściowe"
160
+
161
+ #: lib/ManualImageCropSettingsPage.php:61
162
+ msgid "Manual Image Crop Settings"
163
+ msgstr "Ustawienia: Ręczne przycinanie obrazków"
164
+
165
+ #: lib/ManualImageCropSettingsPage.php:87
166
+ msgid "Mic Custom Settings"
167
+ msgstr "Własne ustawienia: Ręczne przycinanie obrazków"
168
+
169
+ #: lib/ManualImageCropSettingsPage.php:94
170
+ msgid "Crop sizes settings"
171
+ msgstr "Ustawienia rozmiarów do przycinania"
172
+
173
+ #: lib/ManualImageCropSettingsPage.php:120
174
+ msgid "Enter your settings below:"
175
+ msgstr "Podaj poniżej swoje ustawienia:"
176
+
177
+ #: lib/ManualImageCropSettingsPage.php:143
178
+ msgid "Size"
179
+ msgstr "Rozmiar"
180
+
181
+ #: lib/ManualImageCropSettingsPage.php:144
182
+ msgid "Visible"
183
+ msgstr "Widoczny"
184
+
185
+ #: lib/ManualImageCropSettingsPage.php:145
186
+ msgid "Default JPEG Quality"
187
+ msgstr "Domyślna jakość JPEG"
188
+
189
+ #: lib/ManualImageCropSettingsPage.php:146
190
+ msgid "Custom Label"
191
+ msgstr "Niestandardowa etykieta"
192
+
193
+ #: lib/ManualImageCropSettingsPage.php:168
194
+ msgid "Yes"
195
+ msgstr "Tak"
196
+
197
+ #: lib/ManualImageCropSettingsPage.php:169
198
+ msgid "No"
199
+ msgstr "Nie"
languages/microp.pot ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Manual Image Crop\n"
4
+ "POT-Creation-Date: 2015-05-01 00:50+0100\n"
5
+ "PO-Revision-Date: 2015-05-01 00:54+0100\n"
6
+ "Last-Translator: Maciej Gryniuk <maciejka45@gmail.com>\n"
7
+ "Language-Team: \n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.8beta1\n"
13
+ "X-Poedit-Basepath: D:\\Programy\\xampp\\apps\\wordpress\\htdocs\\wp-content\\plugins\\manual-image-crop\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: _e;__\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+
18
+ #: manual-image-crop.php:5
19
+ msgid "Plugin allows you to manually crop all the image sizes registered in your WordPress theme (in particular featured image). Simply click on the \"Crop\" link next to any image in your media library and select the area of the image you want to crop."
20
+ msgstr ""
21
+
22
+ #: lib/ManualImageCrop.php:58
23
+ msgid "Crop"
24
+ msgstr ""
25
+
26
+ #: lib/ManualImageCrop.php:67 lib/ManualImageCrop.php:94
27
+ #: lib/ManualImageCrop.php:104 lib/ManualImageCrop.php:131
28
+ #: lib/ManualImageCropSettingsPage.php:45
29
+ #: lib/ManualImageCropSettingsPage.php:46 manual-image-crop.php:3
30
+ msgid "Manual Image Crop"
31
+ msgstr ""
32
+
33
+ #: lib/ManualImageCrop.php:67
34
+ msgid "Crop featured image"
35
+ msgstr ""
36
+
37
+ #: lib/ManualImageCrop.php:94 lib/ManualImageCrop.php:104
38
+ #: lib/ManualImageCrop.php:131
39
+ msgid "Crop Image"
40
+ msgstr ""
41
+
42
+ #: lib/ManualImageCropEditorWindow.php:30
43
+ msgid "Pick the image size:"
44
+ msgstr ""
45
+
46
+ #: lib/ManualImageCropEditorWindow.php:40
47
+ #: lib/ManualImageCropSettingsPage.php:133
48
+ msgid "Thumbnail"
49
+ msgstr ""
50
+
51
+ #: lib/ManualImageCropEditorWindow.php:41
52
+ #: lib/ManualImageCropSettingsPage.php:134
53
+ msgid "Medium"
54
+ msgstr ""
55
+
56
+ #: lib/ManualImageCropEditorWindow.php:42
57
+ #: lib/ManualImageCropSettingsPage.php:135
58
+ msgid "Large"
59
+ msgstr ""
60
+
61
+ #: lib/ManualImageCropEditorWindow.php:43
62
+ #: lib/ManualImageCropSettingsPage.php:136
63
+ msgid "Full Size"
64
+ msgstr ""
65
+
66
+ #: lib/ManualImageCropEditorWindow.php:151
67
+ msgid "Original picture dimensions:"
68
+ msgstr ""
69
+
70
+ #: lib/ManualImageCropEditorWindow.php:152
71
+ msgid "Target picture dimensions:"
72
+ msgstr ""
73
+
74
+ #: lib/ManualImageCropEditorWindow.php:156
75
+ msgid "Soft proportional crop mode"
76
+ msgstr ""
77
+
78
+ #: lib/ManualImageCropEditorWindow.php:156
79
+ msgid "Hard crop mode"
80
+ msgstr ""
81
+
82
+ #: lib/ManualImageCropEditorWindow.php:160
83
+ msgid "New image:"
84
+ msgstr ""
85
+
86
+ #: lib/ManualImageCropEditorWindow.php:167
87
+ msgid "Previous image:"
88
+ msgstr ""
89
+
90
+ #: lib/ManualImageCropEditorWindow.php:175
91
+ msgid "Crop it!"
92
+ msgstr ""
93
+
94
+ #: lib/ManualImageCropEditorWindow.php:182
95
+ msgid "Target JPEG Quality"
96
+ msgstr ""
97
+
98
+ #: lib/ManualImageCropEditorWindow.php:183
99
+ #: lib/ManualImageCropSettingsPage.php:172
100
+ msgid "100 (best quality, biggest file)"
101
+ msgstr ""
102
+
103
+ #: lib/ManualImageCropEditorWindow.php:184
104
+ #: lib/ManualImageCropSettingsPage.php:173
105
+ msgid "80 (very high quality)"
106
+ msgstr ""
107
+
108
+ #: lib/ManualImageCropEditorWindow.php:185
109
+ #: lib/ManualImageCropSettingsPage.php:174
110
+ msgid "70 (high quality)"
111
+ msgstr ""
112
+
113
+ #: lib/ManualImageCropEditorWindow.php:186
114
+ #: lib/ManualImageCropSettingsPage.php:175
115
+ msgid "60 (good)"
116
+ msgstr ""
117
+
118
+ #: lib/ManualImageCropEditorWindow.php:187
119
+ #: lib/ManualImageCropSettingsPage.php:176
120
+ msgid "50 (average)"
121
+ msgstr ""
122
+
123
+ #: lib/ManualImageCropEditorWindow.php:188
124
+ #: lib/ManualImageCropSettingsPage.php:177
125
+ msgid "30 (low)"
126
+ msgstr ""
127
+
128
+ #: lib/ManualImageCropEditorWindow.php:189
129
+ #: lib/ManualImageCropSettingsPage.php:178
130
+ msgid "10 (very low, smallest file)"
131
+ msgstr ""
132
+
133
+ #: lib/ManualImageCropEditorWindow.php:196
134
+ msgid "Generate Retina/HiDPI (@2x):"
135
+ msgstr ""
136
+
137
+ #: lib/ManualImageCropEditorWindow.php:201
138
+ msgid "The image has been cropped successfully"
139
+ msgstr ""
140
+
141
+ #: lib/ManualImageCropEditorWindow.php:202
142
+ msgid "An Error has occured. Please try again or contact plugin's author."
143
+ msgstr ""
144
+
145
+ #: lib/ManualImageCropEditorWindow.php:245
146
+ msgid "Compatible"
147
+ msgstr ""
148
+
149
+ #: lib/ManualImageCropEditorWindow.php:247
150
+ msgid "Source too small"
151
+ msgstr ""
152
+
153
+ #: lib/ManualImageCropSettingsPage.php:61
154
+ msgid "Manual Image Crop Settings"
155
+ msgstr ""
156
+
157
+ #: lib/ManualImageCropSettingsPage.php:87
158
+ msgid "Mic Custom Settings"
159
+ msgstr ""
160
+
161
+ #: lib/ManualImageCropSettingsPage.php:94
162
+ msgid "Crop sizes settings"
163
+ msgstr ""
164
+
165
+ #: lib/ManualImageCropSettingsPage.php:120
166
+ msgid "Enter your settings below:"
167
+ msgstr ""
168
+
169
+ #: lib/ManualImageCropSettingsPage.php:143
170
+ msgid "Size"
171
+ msgstr ""
172
+
173
+ #: lib/ManualImageCropSettingsPage.php:144
174
+ msgid "Visible"
175
+ msgstr ""
176
+
177
+ #: lib/ManualImageCropSettingsPage.php:145
178
+ msgid "Default JPEG Quality"
179
+ msgstr ""
180
+
181
+ #: lib/ManualImageCropSettingsPage.php:146
182
+ msgid "Custom Label"
183
+ msgstr ""
184
+
185
+ #: lib/ManualImageCropSettingsPage.php:168
186
+ msgid "Yes"
187
+ msgstr ""
188
+
189
+ #: lib/ManualImageCropSettingsPage.php:169
190
+ msgid "No"
191
+ msgstr ""
lib/ManualImageCrop.php CHANGED
@@ -6,18 +6,18 @@
6
  */
7
  class ManualImageCrop {
8
 
9
- private static $instance;
10
 
11
  /**
12
  * Returns the instance of the class [Singleton]
13
  * @return ManualImageCrop
14
  */
15
- public static function getInstance() {
16
- if (self::$instance === null) {
17
- self::$instance = new ManualImageCrop();
18
- }
19
- return self::$instance;
20
- }
21
 
22
  private function __construct() {
23
 
@@ -34,7 +34,7 @@ class ManualImageCrop {
34
 
35
  wp_register_style( 'jquery-jcrop', plugins_url('assets/css/jquery.Jcrop.min.css', dirname( __FILE__ ) ) );
36
  wp_enqueue_style( 'jquery-jcrop' );
37
-
38
  wp_enqueue_script( 'jquery-color', plugins_url('assets/js/jquery.color.js', dirname( __FILE__ )), array( 'jquery') );
39
  wp_enqueue_script( 'jquery-jcrop', plugins_url('assets/js/jquery.Jcrop.min.js', dirname( __FILE__ )), array( 'jquery') );
40
  wp_enqueue_script( 'miccrop', plugins_url('assets/js/microp.js', dirname( __FILE__ )), array( 'jquery') );
@@ -64,16 +64,16 @@ class ManualImageCrop {
64
  * Adds link below "Remove featured image" in post editing form
65
  */
66
  public function addCropFeatureImageEditorLink($content, $post) {
67
- $content .= '<a id="micCropFeatureImage" class="thickbox mic-link" rel="crop" title="Manual Image Crop" href="' . admin_url( 'admin-ajax.php' ) . '?action=mic_editor_window&postId=' . get_post_thumbnail_id($post) . '">' . __('Crop featured image','microp') . '</a>
68
- <script>
69
- setInterval(function() {
70
- if (jQuery(\'#remove-post-thumbnail\').is(\':visible\')) {
71
  jQuery(\'#micCropFeatureImage\').show();
72
  }else {
73
- jQuery(\'#micCropFeatureImage\').hide();
74
  }
75
- }, 200);
76
- </script>';
77
  return $content;
78
  }
79
 
@@ -81,7 +81,7 @@ setInterval(function() {
81
  * Adds link in the ligthbox media library
82
  */
83
  public function addAttachementEditLink() { ?>
84
- <script>
85
  var micEditAttachemtnLinkAdded = false;
86
  var micEditAttachemtnLinkAddedInterval = 0;
87
  jQuery(document).ready(function() {
@@ -91,7 +91,7 @@ setInterval(function() {
91
  var mRegexp = /\?post=([0-9]+)/;
92
  var match = mRegexp.exec(jQuery('.details .edit-attachment').attr('href'));
93
  jQuery('.crop-image-ml.crop-image').remove();
94
- jQuery('.details .edit-attachment').after( '<a class="thickbox mic-link crop-image-ml crop-image" rel="crop" title="Manual Image Crop" href="' + ajaxurl + '?action=mic_editor_window&postId=' + match[1] + '"><?php _e('Crop Image','microp') ?></a>' );
95
  } catch (e) {
96
  console.log(e);
97
  }
@@ -101,7 +101,7 @@ setInterval(function() {
101
  try {
102
  var postId = jQuery('.attachment-details').attr('data-id');
103
  jQuery('.button.crop-image-ml.crop-image').remove();
104
- jQuery('.button.edit-attachment').after( ' <a class="thickbox mic-link crop-image-ml crop-image button" rel="crop" title="Manual Image Crop" href="' + ajaxurl + '?action=mic_editor_window&postId=' + postId + '"><?php _e('Crop Image','microp') ?></a>' );
105
  } catch (e) {
106
  console.log(e);
107
  }
@@ -109,15 +109,15 @@ setInterval(function() {
109
  }, 500);
110
  });
111
  </script>
112
- <?php
113
  }
114
 
115
  /**
116
  * Adds link in the ligthbox media library
117
  */
118
  public function addAfterUploadAttachementEditLink() {
119
- ?>
120
- <script>
121
  var micEditAttachemtnLinkAdded = false;
122
  var micEditAttachemtnLinkAddedInterval = 0;
123
  jQuery(document).ready(function() {
@@ -128,7 +128,7 @@ setInterval(function() {
128
  var mRegexp = /\?post=([0-9]+)/;
129
  var match = mRegexp.exec(jQuery(this).attr('href'));
130
  if (!jQuery(this).parent().find('.edit-attachment.crop-image').length && jQuery(this).parent().find('.pinkynail').attr('src').match(/upload/g)) {
131
- jQuery(this).after( '<a class="thickbox mic-link edit-attachment crop-image" rel="crop" title="Manual Image Crop" href="' + ajaxurl + '?action=mic_editor_window&postId=' + match[1] + '"><?php _e('Crop Image','microp') ?></a>' );
132
  }
133
  } catch (e) {
134
  console.log(e);
@@ -138,7 +138,7 @@ setInterval(function() {
138
  }, 500);
139
  });
140
  </script>
141
- <?php
142
  }
143
 
144
  /**
@@ -147,53 +147,65 @@ setInterval(function() {
147
  public function cropImage() {
148
  global $_wp_additional_image_sizes;
149
 
 
 
 
 
 
 
150
  $uploadsDir = wp_upload_dir();
151
-
152
  // checks for ssl. wp_upload_dir does not handle ssl (ssl admin trips on this and subsequent ajax success to browser)
153
- if (is_ssl()) {
154
  $uploadsDir['baseurl'] = preg_replace('#^http://#i', 'https://', $uploadsDir['baseurl']);
155
  }
156
 
157
- $src_file_url = wp_get_attachment_image_src($_POST['attachmentId'], 'full');
158
 
159
- if (!$src_file_url) {
160
- echo json_encode (array('status' => 'error', 'message' => 'wrong attachment' ) );
161
- exit;
162
- }
163
-
164
-
165
- $src_file = str_replace($uploadsDir['baseurl'], $uploadsDir['basedir'], $src_file_url[0]);
166
- $dst_file_url = wp_get_attachment_image_src($_POST['attachmentId'], $_POST['editedSize']);
167
-
168
- if (!$dst_file_url) {
169
- exit;
 
 
 
170
  }
171
- $dst_file = str_replace($uploadsDir['baseurl'], $uploadsDir['basedir'], $dst_file_url[0]);
172
-
173
 
174
  //checks if the destination image file is present (if it's not, we want to create a new file, as the WordPress returns the original image instead of specific one)
175
  if ($dst_file == $src_file) {
176
  $attachmentData = wp_generate_attachment_metadata( $_POST['attachmentId'], $dst_file );
177
-
 
 
 
 
 
 
 
 
 
178
  //new destination file path - replaces original file name with the correct one
179
  $dst_file = str_replace( basename($attachmentData['file']), $attachmentData['sizes'][ $_POST['editedSize'] ]['file'], $dst_file);
180
 
181
- //saves new path to the image size in the database
182
- wp_update_attachment_metadata( $_POST['attachmentId'], $attachmentData );
183
-
184
  //retrieves the new url to file (needet to refresh the preview)
185
  $dst_file_url = wp_get_attachment_image_src($_POST['attachmentId'], $_POST['editedSize']);
186
  }
187
 
188
  //sets the destination image dimensions
189
  if (isset($_wp_additional_image_sizes[$_POST['editedSize']])) {
190
- $dst_w = min(intval($_wp_additional_image_sizes[$_POST['editedSize']]['width']), $_POST['select']['w'] * $_POST['previewScale']);;
191
  $dst_h = min(intval($_wp_additional_image_sizes[$_POST['editedSize']]['height']), $_POST['select']['h'] * $_POST['previewScale']);
192
  } else {
193
  $dst_w = min(get_option($_POST['editedSize'].'_size_w'), $_POST['select']['w'] * $_POST['previewScale']);
194
  $dst_h = min(get_option($_POST['editedSize'].'_size_h'), $_POST['select']['h'] * $_POST['previewScale']);
195
  }
196
-
197
  if (!$dst_w || !$dst_h) {
198
  echo json_encode (array('status' => 'error', 'message' => 'wrong dimensions' ) );
199
  exit;
@@ -206,78 +218,102 @@ setInterval(function() {
206
  $src_y = max(0, $_POST['select']['y']) * $_POST['previewScale'];
207
  $src_w = max(0, $_POST['select']['w']) * $_POST['previewScale'];
208
  $src_h = max(0, $_POST['select']['h']) * $_POST['previewScale'];
209
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  //saves the selected area
211
  $imageMetadata = wp_get_attachment_metadata($_POST['attachmentId']);
212
  $imageMetadata['micSelectedArea'][$_POST['editedSize']] = array(
213
- 'x' => $_POST['select']['x'],
214
- 'y' => $_POST['select']['y'],
215
- 'w' => $_POST['select']['w'],
216
- 'h' => $_POST['select']['h'],
217
- );
 
218
  wp_update_attachment_metadata($_POST['attachmentId'], $imageMetadata);
219
-
220
- $quality = intval($_POST['mic_quality']);
221
 
222
- if ( function_exists('wp_get_image_editor') ) {
223
- $img = wp_get_image_editor( $src_file );
224
-
225
- if ( ! is_wp_error( $img ) ) {
226
-
227
- $img->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, false );
228
- $img->set_quality( $quality );
229
- $img->save($dst_file);
230
- }else {
231
- echo json_encode (array('status' => 'error', 'message' => 'WP_ERROR: ' . $img->get_error_message() ) );
 
 
 
 
 
 
 
232
  exit;
233
- }
234
- } else {
235
- //determines what's the image format
236
- $ext = pathinfo($src_file, PATHINFO_EXTENSION);
237
- if ($ext == "gif"){
238
- $src_img = imagecreatefromgif($src_file);
239
- } else if($ext =="png"){
240
- $src_img = imagecreatefrompng($src_file);
241
- } else {
242
- $src_img = imagecreatefromjpeg($src_file);
243
- }
244
-
245
- if ($src_img === false ) {
246
- echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: Cannot create image from the source file' ) );
247
- exit;
248
- }
249
-
250
- $dst_img = imagecreatetruecolor($dst_w, $dst_h);
251
- $resampleReturn = imagecopyresampled($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
252
-
253
- if ($resampleReturn === false ) {
254
- echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagecopyresampled' ) );
255
- exit;
256
- }
257
-
258
  $imageSaveReturn = true;
259
- if ($ext == "gif"){
260
- $imageSaveReturn = imagegif($dst_img, $dst_file);
261
- } else if($ext =="png"){
262
- $imageSaveReturn = imagepng($dst_img, $dst_file);
263
- } else {
264
- $imageSaveReturn = imagejpeg($dst_img, $dst_file, $quality);
265
- }
266
-
267
- if ($imageSaveReturn === false ) {
268
- echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagejpeg/imagegif/imagepng' ) );
269
- exit;
270
- }
271
- }
272
-
273
  // Generate Retina Image
274
  if( isset( $_POST['make2x'] ) && $_POST['make2x'] === 'true' ) {
275
  $dst_w2x = $dst_w * 2;
276
  $dst_h2x = $dst_h * 2;
277
-
278
  $dot = strrpos($dst_file,".");
279
  $dst_file2x = substr($dst_file,0,$dot).'@2x'.substr($dst_file,$dot);
280
-
281
  // Check image size and create the retina file if possible
282
  if ( $src_w > $dst_w2x && $src_h > $dst_h2x) {
283
  if ( function_exists('wp_get_image_editor') ) {
@@ -287,19 +323,19 @@ setInterval(function() {
287
  $img->set_quality( $quality );
288
  $img->save($dst_file2x);
289
  }else {
290
- echo json_encode (array('status' => 'error', 'message' => 'WP_ERROR: ' . $img->get_error_message() ) );
291
  exit;
292
- }
293
- } else {
294
  $dst_img2x = imagecreatetruecolor($dst_w2x, $dst_h2x);
295
  $resampleReturn = imagecopyresampled($dst_img2x, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w2x, $dst_h2x, $src_w, $src_h);
296
-
297
- if ($resampleReturn === false ) {
298
- echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagecopyresampled' ) );
299
- exit;
300
- }
301
-
302
- $imageSaveReturn = true;
303
  if ($ext == "gif"){
304
  $imageSaveReturn = imagegif($dst_img2x, $dst_file2x);
305
  } else if($ext =="png"){
@@ -307,15 +343,15 @@ setInterval(function() {
307
  } else {
308
  $imageSaveReturn = imagejpeg($dst_img2x, $dst_file2x, $quality);
309
  }
310
-
311
- if ($imageSaveReturn === false ) {
312
- echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagejpeg/imagegif/imagepng' ) );
313
- exit;
314
  }
315
  }
316
  }
317
  }
318
- // update 'mic_make2x' option status to persist choice
319
  if( isset( $_POST['make2x'] ) && $_POST['make2x'] !== get_option('mic_make2x') ) {
320
  update_option('mic_make2x', $_POST['make2x']);
321
  }
6
  */
7
  class ManualImageCrop {
8
 
9
+ private static $instance;
10
 
11
  /**
12
  * Returns the instance of the class [Singleton]
13
  * @return ManualImageCrop
14
  */
15
+ public static function getInstance() {
16
+ if (self::$instance === null) {
17
+ self::$instance = new ManualImageCrop();
18
+ }
19
+ return self::$instance;
20
+ }
21
 
22
  private function __construct() {
23
 
34
 
35
  wp_register_style( 'jquery-jcrop', plugins_url('assets/css/jquery.Jcrop.min.css', dirname( __FILE__ ) ) );
36
  wp_enqueue_style( 'jquery-jcrop' );
37
+
38
  wp_enqueue_script( 'jquery-color', plugins_url('assets/js/jquery.color.js', dirname( __FILE__ )), array( 'jquery') );
39
  wp_enqueue_script( 'jquery-jcrop', plugins_url('assets/js/jquery.Jcrop.min.js', dirname( __FILE__ )), array( 'jquery') );
40
  wp_enqueue_script( 'miccrop', plugins_url('assets/js/microp.js', dirname( __FILE__ )), array( 'jquery') );
64
  * Adds link below "Remove featured image" in post editing form
65
  */
66
  public function addCropFeatureImageEditorLink($content, $post) {
67
+ $content .= '<a id="micCropFeatureImage" class="thickbox mic-link" rel="crop" title="' . __('Manual Image Crop','microp') . '" href="' . admin_url( 'admin-ajax.php' ) . '?action=mic_editor_window&postId=' . get_post_thumbnail_id($post) . '">' . __('Crop featured image','microp') . '</a>
68
+ <script>
69
+ setInterval(function() {
70
+ if (jQuery(\'#remove-post-thumbnail\').is(\':visible\')) {
71
  jQuery(\'#micCropFeatureImage\').show();
72
  }else {
73
+ jQuery(\'#micCropFeatureImage\').hide();
74
  }
75
+ }, 200);
76
+ </script>';
77
  return $content;
78
  }
79
 
81
  * Adds link in the ligthbox media library
82
  */
83
  public function addAttachementEditLink() { ?>
84
+ <script>
85
  var micEditAttachemtnLinkAdded = false;
86
  var micEditAttachemtnLinkAddedInterval = 0;
87
  jQuery(document).ready(function() {
91
  var mRegexp = /\?post=([0-9]+)/;
92
  var match = mRegexp.exec(jQuery('.details .edit-attachment').attr('href'));
93
  jQuery('.crop-image-ml.crop-image').remove();
94
+ jQuery('.details .edit-attachment').after( '<a class="thickbox mic-link crop-image-ml crop-image" rel="crop" title="<?php _e("Manual Image Crop","microp"); ?>" href="' + ajaxurl + '?action=mic_editor_window&postId=' + match[1] + '"><?php _e('Crop Image','microp') ?></a>' );
95
  } catch (e) {
96
  console.log(e);
97
  }
101
  try {
102
  var postId = jQuery('.attachment-details').attr('data-id');
103
  jQuery('.button.crop-image-ml.crop-image').remove();
104
+ jQuery('.button.edit-attachment').after( ' <a class="thickbox mic-link crop-image-ml crop-image button" rel="crop" title="<?php _e("Manual Image Crop","microp"); ?>" href="' + ajaxurl + '?action=mic_editor_window&postId=' + postId + '"><?php _e('Crop Image','microp') ?></a>' );
105
  } catch (e) {
106
  console.log(e);
107
  }
109
  }, 500);
110
  });
111
  </script>
112
+ <?php
113
  }
114
 
115
  /**
116
  * Adds link in the ligthbox media library
117
  */
118
  public function addAfterUploadAttachementEditLink() {
119
+ ?>
120
+ <script>
121
  var micEditAttachemtnLinkAdded = false;
122
  var micEditAttachemtnLinkAddedInterval = 0;
123
  jQuery(document).ready(function() {
128
  var mRegexp = /\?post=([0-9]+)/;
129
  var match = mRegexp.exec(jQuery(this).attr('href'));
130
  if (!jQuery(this).parent().find('.edit-attachment.crop-image').length && jQuery(this).parent().find('.pinkynail').attr('src').match(/upload/g)) {
131
+ jQuery(this).after( '<a class="thickbox mic-link edit-attachment crop-image" rel="crop" title="<?php _e("Manual Image Crop","microp"); ?>" href="' + ajaxurl + '?action=mic_editor_window&postId=' + match[1] + '"><?php _e('Crop Image','microp') ?></a>' );
132
  }
133
  } catch (e) {
134
  console.log(e);
138
  }, 500);
139
  });
140
  </script>
141
+ <?php
142
  }
143
 
144
  /**
147
  public function cropImage() {
148
  global $_wp_additional_image_sizes;
149
 
150
+ $dst_file_url = wp_get_attachment_image_src($_POST['attachmentId'], $_POST['editedSize']);
151
+
152
+ if (!$dst_file_url) {
153
+ exit;
154
+ }
155
+
156
  $uploadsDir = wp_upload_dir();
157
+
158
  // checks for ssl. wp_upload_dir does not handle ssl (ssl admin trips on this and subsequent ajax success to browser)
159
+ if (is_ssl()) {
160
  $uploadsDir['baseurl'] = preg_replace('#^http://#i', 'https://', $uploadsDir['baseurl']);
161
  }
162
 
 
163
 
164
+ if ( function_exists( '_load_image_to_edit_path' ) ) {
165
+ // this function is consider as private, but it return proper image path. Notice it is in function_exists condition
166
+ $src_file = _load_image_to_edit_path( $_POST['attachmentId'], 'full' );
167
+ $dst_file = _load_image_to_edit_path( $_POST['attachmentId'], $_POST['editedSize'] );
168
+ } else {
169
+ $src_file_url = wp_get_attachment_image_src( $_POST['attachmentId'], 'full' );
170
+
171
+ if ( ! $src_file_url ) {
172
+ echo json_encode( array( 'status' => 'error', 'message' => 'wrong attachment' ) );
173
+ exit;
174
+ }
175
+
176
+ $src_file = str_replace( $uploadsDir['baseurl'], $uploadsDir['basedir'], $src_file_url[0] );
177
+ $dst_file = str_replace( $uploadsDir['baseurl'], $uploadsDir['basedir'], $dst_file_url[0] );
178
  }
 
 
179
 
180
  //checks if the destination image file is present (if it's not, we want to create a new file, as the WordPress returns the original image instead of specific one)
181
  if ($dst_file == $src_file) {
182
  $attachmentData = wp_generate_attachment_metadata( $_POST['attachmentId'], $dst_file );
183
+
184
+ //overwrite with previous values
185
+ $prevAttachmentData = wp_get_attachment_metadata($_POST['attachmentId']);
186
+ if (isset($prevAttachmentData['micSelectedArea'])) {
187
+ $attachmentData['micSelectedArea'] = $prevAttachmentData['micSelectedArea'];
188
+ }
189
+
190
+ //saves new path to the image size in the database
191
+ wp_update_attachment_metadata( $_POST['attachmentId'], $attachmentData );
192
+
193
  //new destination file path - replaces original file name with the correct one
194
  $dst_file = str_replace( basename($attachmentData['file']), $attachmentData['sizes'][ $_POST['editedSize'] ]['file'], $dst_file);
195
 
 
 
 
196
  //retrieves the new url to file (needet to refresh the preview)
197
  $dst_file_url = wp_get_attachment_image_src($_POST['attachmentId'], $_POST['editedSize']);
198
  }
199
 
200
  //sets the destination image dimensions
201
  if (isset($_wp_additional_image_sizes[$_POST['editedSize']])) {
202
+ $dst_w = min(intval($_wp_additional_image_sizes[$_POST['editedSize']]['width']), $_POST['select']['w'] * $_POST['previewScale']);
203
  $dst_h = min(intval($_wp_additional_image_sizes[$_POST['editedSize']]['height']), $_POST['select']['h'] * $_POST['previewScale']);
204
  } else {
205
  $dst_w = min(get_option($_POST['editedSize'].'_size_w'), $_POST['select']['w'] * $_POST['previewScale']);
206
  $dst_h = min(get_option($_POST['editedSize'].'_size_h'), $_POST['select']['h'] * $_POST['previewScale']);
207
  }
208
+
209
  if (!$dst_w || !$dst_h) {
210
  echo json_encode (array('status' => 'error', 'message' => 'wrong dimensions' ) );
211
  exit;
218
  $src_y = max(0, $_POST['select']['y']) * $_POST['previewScale'];
219
  $src_w = max(0, $_POST['select']['w']) * $_POST['previewScale'];
220
  $src_h = max(0, $_POST['select']['h']) * $_POST['previewScale'];
221
+
222
+ $size = wp_get_image_editor( $src_file )->get_size();
223
+
224
+ $is_higher = ( $dst_h > $size["height"] );
225
+ $is_wider = ( $dst_w > $size["width"] );
226
+
227
+ if ( $is_higher || $is_wider ) {
228
+ if ( $is_higher ) {
229
+ $scale = $src_h / $size["height"];
230
+ } else {
231
+ $scale = $src_w / $size["width"];
232
+ }
233
+
234
+ $src_w = $src_w / $scale;
235
+ $src_h = $src_h / $scale;
236
+ $src_x = $src_x / $scale;
237
+ $src_y = $src_y / $scale;
238
+ }
239
+
240
  //saves the selected area
241
  $imageMetadata = wp_get_attachment_metadata($_POST['attachmentId']);
242
  $imageMetadata['micSelectedArea'][$_POST['editedSize']] = array(
243
+ 'x' => $_POST['select']['x'],
244
+ 'y' => $_POST['select']['y'],
245
+ 'w' => $_POST['select']['w'],
246
+ 'h' => $_POST['select']['h'],
247
+ 'scale' => $_POST['previewScale'],
248
+ );
249
  wp_update_attachment_metadata($_POST['attachmentId'], $imageMetadata);
 
 
250
 
251
+ $quality = isset($_POST['mic_quality']) ? intval($_POST['mic_quality']) : 60;
252
+
253
+ if ( function_exists('wp_get_image_editor') ) {
254
+ $img = wp_get_image_editor( $src_file );
255
+
256
+ if ( ! is_wp_error( $img ) ) {
257
+
258
+ $img->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, false );
259
+ $img->set_quality( $quality );
260
+ $saveStatus = $img->save( $dst_file );
261
+
262
+ if ( is_wp_error( $saveStatus ) ) {
263
+ echo json_encode( array( 'status' => 'error', 'message' => 'WP_ERROR: ' . $saveStatus->get_error_message() ) );
264
+ exit;
265
+ }
266
+ }else {
267
+ echo json_encode (array('status' => 'error', 'message' => 'WP_ERROR: ' . $img->get_error_message() ) );
268
  exit;
269
+ }
270
+ } else {
271
+ //determines what's the image format
272
+ $ext = pathinfo($src_file, PATHINFO_EXTENSION);
273
+ if ($ext == "gif"){
274
+ $src_img = imagecreatefromgif($src_file);
275
+ } else if($ext =="png"){
276
+ $src_img = imagecreatefrompng($src_file);
277
+ } else {
278
+ $src_img = imagecreatefromjpeg($src_file);
279
+ }
280
+
281
+ if ($src_img === false ) {
282
+ echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: Cannot create image from the source file' ) );
283
+ exit;
284
+ }
285
+
286
+ $dst_img = imagecreatetruecolor($dst_w, $dst_h);
287
+ $resampleReturn = imagecopyresampled($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
288
+
289
+ if ($resampleReturn === false ) {
290
+ echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagecopyresampled' ) );
291
+ exit;
292
+ }
293
+
294
  $imageSaveReturn = true;
295
+ if ($ext == "gif"){
296
+ $imageSaveReturn = imagegif($dst_img, $dst_file);
297
+ } else if($ext =="png"){
298
+ $imageSaveReturn = imagepng($dst_img, $dst_file);
299
+ } else {
300
+ $imageSaveReturn = imagejpeg($dst_img, $dst_file, $quality);
301
+ }
302
+
303
+ if ($imageSaveReturn === false ) {
304
+ echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagejpeg/imagegif/imagepng' ) );
305
+ exit;
306
+ }
307
+ }
308
+
309
  // Generate Retina Image
310
  if( isset( $_POST['make2x'] ) && $_POST['make2x'] === 'true' ) {
311
  $dst_w2x = $dst_w * 2;
312
  $dst_h2x = $dst_h * 2;
313
+
314
  $dot = strrpos($dst_file,".");
315
  $dst_file2x = substr($dst_file,0,$dot).'@2x'.substr($dst_file,$dot);
316
+
317
  // Check image size and create the retina file if possible
318
  if ( $src_w > $dst_w2x && $src_h > $dst_h2x) {
319
  if ( function_exists('wp_get_image_editor') ) {
323
  $img->set_quality( $quality );
324
  $img->save($dst_file2x);
325
  }else {
326
+ echo json_encode (array('status' => 'error', 'message' => 'WP_ERROR: ' . $img->get_error_message() ) );
327
  exit;
328
+ }
329
+ } else {
330
  $dst_img2x = imagecreatetruecolor($dst_w2x, $dst_h2x);
331
  $resampleReturn = imagecopyresampled($dst_img2x, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w2x, $dst_h2x, $src_w, $src_h);
332
+
333
+ if ($resampleReturn === false ) {
334
+ echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagecopyresampled' ) );
335
+ exit;
336
+ }
337
+
338
+ $imageSaveReturn = true;
339
  if ($ext == "gif"){
340
  $imageSaveReturn = imagegif($dst_img2x, $dst_file2x);
341
  } else if($ext =="png"){
343
  } else {
344
  $imageSaveReturn = imagejpeg($dst_img2x, $dst_file2x, $quality);
345
  }
346
+
347
+ if ($imageSaveReturn === false ) {
348
+ echo json_encode (array('status' => 'error', 'message' => 'PHP ERROR: imagejpeg/imagegif/imagepng' ) );
349
+ exit;
350
  }
351
  }
352
  }
353
  }
354
+ // update 'mic_make2x' option status to persist choice
355
  if( isset( $_POST['make2x'] ) && $_POST['make2x'] !== get_option('mic_make2x') ) {
356
  update_option('mic_make2x', $_POST['make2x']);
357
  }
lib/ManualImageCropEditorWindow.php CHANGED
@@ -6,18 +6,18 @@
6
  */
7
  class ManualImageCropEditorWindow {
8
 
9
- private static $instance;
10
 
11
  /**
12
  * Returns the instance of the class [Singleton]
13
  * @return ManualImageCropEditorWindow
14
  */
15
- public static function getInstance() {
16
- if (self::$instance === null) {
17
- self::$instance = new ManualImageCropEditorWindow();
18
- }
19
- return self::$instance;
20
- }
21
 
22
  private function __construct() {
23
 
@@ -26,170 +26,216 @@ class ManualImageCropEditorWindow {
26
  public function renderWindow() {
27
  $sizesSettings = MicSettingsPage::getSettings();
28
  ?>
29
- <div class="mic-editor-wrapper">
30
- <h4><?php _e('Pick the image size:','microp'); ?></h4>
31
- <h2 class="nav-tab-wrapper">
32
- <?php
33
- global $_wp_additional_image_sizes;
 
 
34
 
35
- $imageSizes = get_intermediate_image_sizes();
36
 
37
- $editedSize = isset( $_GET['size'] ) ? $_GET['size'] : $imageSizes[0];
38
 
39
- $sizeLabels = apply_filters( 'image_size_names_choose', array(
40
- 'thumbnail' => __('Thumbnail'),
41
- 'medium' => __('Medium'),
42
- 'large' => __('Large'),
43
- 'full' => __('Full Size'),
44
- ) );
45
- $sizeLabels = apply_filters( 'image_size_names_choose', array() );
46
-
47
- foreach ($imageSizes as $s) {
48
- if ( ! isset($sizesSettings[$s]) ) {
49
- $sizesSettings[$s] = array('label' => '', 'quality' => 80, 'visibility' => 'visible');
50
- }
51
-
52
- if ( $sizesSettings[$s]['visibility'] == 'hidden') {
53
- continue;
54
- }
55
-
56
- if (isset($_wp_additional_image_sizes[$s])) {
57
- $cropMethod = $_wp_additional_image_sizes[$s]['crop'];
58
- } else {
59
- $cropMethod = get_option($s.'_crop');
60
- }
61
- if ($cropMethod == 0) {
62
- continue;
63
- }
64
 
65
- // Get user defined label for the size or just cleanup a bit
66
- $label = isset($sizeLabels[$s]) ? $sizeLabels[$s] : ucfirst( str_replace( '-', ' ', $s ) );
67
- $label = $sizesSettings[$s]['label'] ? $sizesSettings[$s]['label'] : $label;
68
- echo '<a href="' . admin_url( 'admin-ajax.php' ) . '?action=mic_editor_window&size=' . $s . '&postId=' . $_GET['postId'] . '&width=940" class="mic-icon-' . $s . ' rm-crop-size-tab nav-tab ' . ( ($s == $editedSize) ? 'nav-tab-active' : '' ) . '">' . $label . '</a>';
69
  }
70
- ?>
71
- </h2>
72
- <div class="mic-left-col">
73
- <?php
74
- //reads the specific registered image size dimension
75
- if (isset($_wp_additional_image_sizes[$editedSize])) {
76
- $width = intval($_wp_additional_image_sizes[$editedSize]['width']);
77
- $height = intval($_wp_additional_image_sizes[$editedSize]['height']);
78
- $cropMethod = $_wp_additional_image_sizes[$editedSize]['crop'];
79
- } else {
80
- $width = get_option($editedSize.'_size_w');
81
- $height = get_option($editedSize.'_size_h');
82
- $cropMethod = get_option($editedSize.'_crop');
83
  }
 
 
84
 
85
- $uploadsDir = wp_upload_dir();
 
 
 
 
 
 
 
86
 
87
- $metaData = wp_get_attachment_metadata($_GET['postId']);
 
 
88
 
89
- $src_file_url = wp_get_attachment_image_src($_GET['postId'], 'full');
90
- if (!$src_file_url) {
91
- echo json_encode (array('status' => 'error', 'message' => 'wrong attachement' ) );
92
- exit;
93
- }
94
- $src_file = str_replace($uploadsDir['baseurl'], $uploadsDir['basedir'], $src_file_url[0]);
95
- $sizes = getimagesize($src_file);
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
- $previewWidth = min($sizes[0], 500);
98
- $previewHeight = min($sizes[1], 350);
99
- $previewRatio = 1;
100
-
101
- if ($sizes[1] / 350 < $sizes[0] / 500) {
102
- $previewHeight = $sizes[1] * $previewWidth / $sizes[0] ;
103
- $previewRatio = $sizes[1] / $previewHeight;
104
- }else {
105
- $previewWidth = $sizes[0] * $previewHeight / $sizes[1];
106
- $previewRatio = $sizes[0] / $previewWidth;
107
- }
108
-
109
- $minWidth = min($width / $previewRatio, $previewWidth);
110
- $minHeight = min($height / $previewRatio, $previewHeight);
111
-
112
- if ($cropMethod == 1) {
113
- $aspectRatio = ($width / $height);
114
- if ($aspectRatio * $minWidth > $sizes[0]) {
115
- $aspectRatio = ($previewWidth / $minHeight);
116
- }else if (1 / $aspectRatio * $minHeight > $sizes[1]) {
117
- $aspectRatio = ($minWidth / $previewHeight);
118
- }
119
-
120
- if ($minWidth / $aspectRatio > $previewHeight) {
121
- $aspectRatio = $minWidth / $previewHeight;
122
- }
123
- }else {
124
- $aspectRatio = $sizes[0] / $sizes[1];
125
- }
126
-
127
-
128
- $smallPreviewWidth = min($width, 180);
129
- $smallPreviewHeight = min($height, 180);
130
-
131
- if ($width > $height) {
132
- $smallPreviewHeight = $smallPreviewWidth * 1/ $aspectRatio;
133
- }else {
134
- $smallPreviewWidth = $smallPreviewHeight * $aspectRatio;
135
- }
136
- ?>
137
- <div style="margin: auto; width: <?php echo $previewWidth; ?>px;"><img style="width: <?php echo $previewWidth; ?>px; height: <?php echo $previewHeight; ?>px;" id="jcrop_target" src="<?php echo wp_get_attachment_url($_GET['postId']); ?>"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  </div>
139
- <div class="mic-right-col">
140
- <div>
141
- <?php _e('Original picture dimensions:','microp') ?> <strong><?php echo $sizes[0]; ?> x <?php echo $sizes[1]; ?> px</strong><br />
142
- <?php _e('Target picture dimensions:','microp') ?> <strong><?php echo $width; ?>px x <?php echo $height; ?>px</strong> (<?php if ($cropMethod == 0) { _e('Soft proportional crop mode','microp'); }else { _e('Hard crop mode','microp'); } ?>)
143
- </div>
144
-
145
- <div class="mic-52-col">
146
- <?php _e('New image:','microp') ?><br />
147
- <div style="width: <?php echo $smallPreviewWidth; ?>px; height: <?php echo $smallPreviewHeight; ?>px; overflow: hidden; margin-left: 5px; float: right;">
148
- <img id="preview" src="<?php echo wp_get_attachment_url($_GET['postId']); ?>">
149
- </div>
150
- </div>
151
-
152
- <div class="mic-48-col">
153
- <?php _e('Previous image:','microp');
154
- $editedImage = wp_get_attachment_image_src($_GET['postId'], $editedSize);
155
- ?>
156
- <div style="width: <?php echo $smallPreviewWidth; ?>px; height: <?php echo $smallPreviewHeight; ?>px; overflow: hidden; margin-left: 5px;">
157
- <img id="micPreviousImage" style="max-width: <?php echo $smallPreviewWidth; ?>px; max-height: <?php echo $smallPreviewHeight; ?>px;" src="<?php echo $editedImage[0] . '?' . time(); ?>">
158
- </div>
159
- </div>
160
-
161
- <input id="micCropImage" class="button-primary button-large" type="button" value="<?php _e('Crop it!','microp') ?>" />
162
- <img src="<?php echo includes_url(); ?>js/thickbox/loadingAnimation.gif" id="micLoading" />
163
-
164
-
165
- <?php
166
- $ext = strtolower( pathinfo($src_file, PATHINFO_EXTENSION) );
167
- if ($ext == 'jpg' || $ext == 'jpeg') {
168
- echo '<div class="mic-option"><label for="micQuality">' . __('Target JPEG Quality', 'microp') . '</label> <select id="micQuality" name="mic_quality">
169
- <option value="100">' . __('100 (best quality, biggest file)', 'microp') . '</option>
170
- <option value="80" ' . ( $sizesSettings[$editedSize]['quality'] == '80' ? 'selected' : '' ) . '>' . __('80 (very high quality)', 'microp') . '</option>
171
- <option value="70" ' . ( $sizesSettings[$editedSize]['quality'] == '70' ? 'selected' : '' ) . '>' . __('70 (high quality)', 'microp') . '</option>
172
- <option value="60" ' . ( $sizesSettings[$editedSize]['quality'] == '60' ? 'selected' : '' ) . '>' . __('60 (good)', 'microp') . '</option>
173
- <option value="50" ' . ( $sizesSettings[$editedSize]['quality'] == '50' ? 'selected' : '' ) . '>' . __('50 (average)', 'microp') . '</option>
174
- <option value="30" ' . ( $sizesSettings[$editedSize]['quality'] == '30' ? 'selected' : '' ) . '>' . __('30 (low)', 'microp') . '</option>
175
- <option value="10" ' . ( $sizesSettings[$editedSize]['quality'] == '10' ? 'selected' : '' ) . '>' . __('10 (very low, smallest file)', 'microp') . '</option>
176
- </select></div>';
177
- }
178
- ?>
179
- <?php
180
  if ( is_plugin_active('wp-retina-2x/wp-retina-2x.php') ) { ?>
181
- <div class="mic-option">
182
- <input type="checkbox" id="mic-make-2x" <?php if(get_option('mic_make2x') === 'true' ) echo 'checked="checked"' ?> /> <label for="mic-make-2x"><?php _e('Generate Retina/HiDPI (@2x):', 'microp') ?> <span id="mic-2x-status"></span></label>
183
- </div>
184
- <?php
 
 
 
185
  } ?>
186
-
187
- <div id="micSuccessMessage" class="updated below-h2"><?php _e('The image has been cropped successfully','microp') ?></div>
188
- <div id="micFailureMessage" class="error below-h2"><span class="error-message"></span><br /><?php _e('An Error has occured. Please try again or contact plugin\'s author.','microp') ?></div>
189
-
190
- </div>
191
  </div>
192
- <script>
 
 
 
 
 
 
 
193
  jQuery(document).ready(function($) {
194
  mic_attachment_id = <?php echo $_GET['postId']; ?>;
195
  mic_edited_size = '<?php echo $editedSize; ?>';
@@ -236,7 +282,7 @@ class ManualImageCropEditorWindow {
236
  }
237
  });
238
  </script>
239
- <?php
240
- die;
241
  }
242
  }
6
  */
7
  class ManualImageCropEditorWindow {
8
 
9
+ private static $instance;
10
 
11
  /**
12
  * Returns the instance of the class [Singleton]
13
  * @return ManualImageCropEditorWindow
14
  */
15
+ public static function getInstance() {
16
+ if (self::$instance === null) {
17
+ self::$instance = new ManualImageCropEditorWindow();
18
+ }
19
+ return self::$instance;
20
+ }
21
 
22
  private function __construct() {
23
 
26
  public function renderWindow() {
27
  $sizesSettings = MicSettingsPage::getSettings();
28
  ?>
29
+ <div class="mic-editor-wrapper">
30
+ <h4>
31
+ <?php _e('Pick the image size:','microp'); ?>
32
+ </h4>
33
+ <h2 class="nav-tab-wrapper">
34
+ <?php
35
+ global $_wp_additional_image_sizes;
36
 
37
+ $imageSizes = get_intermediate_image_sizes();
38
 
39
+ $editedSize = isset( $_GET['size'] ) ? $_GET['size'] : null;
40
 
41
+ $sizeLabels = apply_filters( 'image_size_names_choose', array(
42
+ 'thumbnail' => __('Thumbnail'),
43
+ 'medium' => __('Medium'),
44
+ 'large' => __('Large'),
45
+ 'full' => __('Full Size'),
46
+ ) );
47
+ $sizeLabels = apply_filters( 'image_size_names_choose', array() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
+ foreach ($imageSizes as $s) {
50
+ if ( ! isset($sizesSettings[$s]) ) {
51
+ $sizesSettings[$s] = array('label' => '', 'quality' => 80, 'visibility' => 'visible');
 
52
  }
53
+
54
+ if ( $sizesSettings[$s]['visibility'] == 'hidden') {
55
+ if ($editedSize == $s) {
56
+ $editedSize = null;
 
 
 
 
 
 
 
 
 
57
  }
58
+ continue;
59
+ }
60
 
61
+ if (isset($_wp_additional_image_sizes[$s])) {
62
+ $cropMethod = $_wp_additional_image_sizes[$s]['crop'];
63
+ } else {
64
+ $cropMethod = get_option($s.'_crop');
65
+ }
66
+ if ($cropMethod == 0) {
67
+ continue;
68
+ }
69
 
70
+ if ( is_null($editedSize) ) {
71
+ $editedSize = $s;
72
+ }
73
 
74
+ // Get user defined label for the size or just cleanup a bit
75
+ $label = isset($sizeLabels[$s]) ? $sizeLabels[$s] : ucfirst( str_replace( '-', ' ', $s ) );
76
+ $label = $sizesSettings[$s]['label'] ? $sizesSettings[$s]['label'] : $label;
77
+ echo '<a href="' . admin_url( 'admin-ajax.php' ) . '?action=mic_editor_window&size=' . $s . '&postId=' . $_GET['postId'] . '&width=940" class="mic-icon-' . $s . ' rm-crop-size-tab nav-tab ' . ( ($s == $editedSize) ? 'nav-tab-active' : '' ) . '">' . $label . '</a>';
78
+ }
79
+ ?>
80
+ </h2>
81
+ <div class="mic-left-col">
82
+ <?php
83
+ //reads the specific registered image size dimension
84
+ if (isset($_wp_additional_image_sizes[$editedSize])) {
85
+ $width = intval($_wp_additional_image_sizes[$editedSize]['width']);
86
+ $height = intval($_wp_additional_image_sizes[$editedSize]['height']);
87
+ $cropMethod = $_wp_additional_image_sizes[$editedSize]['crop'];
88
+ } else {
89
+ $width = get_option($editedSize.'_size_w');
90
+ $height = get_option($editedSize.'_size_h');
91
+ $cropMethod = get_option($editedSize.'_crop');
92
+ }
93
 
94
+ $uploadsDir = wp_upload_dir();
95
+
96
+ $metaData = wp_get_attachment_metadata($_GET['postId']);
97
+
98
+ $src_file_url = wp_get_attachment_image_src($_GET['postId'], 'full');
99
+ if (!$src_file_url) {
100
+ echo json_encode (array('status' => 'error', 'message' => 'wrong attachement' ) );
101
+ exit;
102
+ }
103
+ $src_file = str_replace($uploadsDir['baseurl'], $uploadsDir['basedir'], $src_file_url[0]);
104
+ $sizes = getimagesize($src_file);
105
+
106
+ $original[0] = $sizes[0];
107
+ $original[1] = $sizes[1];
108
+
109
+ if ($width > $sizes[0]) {
110
+ $sizes[1] = ( $sizes[1] * ($width / $sizes[0]) );
111
+ $height = ceil($height);
112
+ $sizes[0] = $width;
113
+ }
114
+
115
+ $previewWidth = min($sizes[0], 500);
116
+ $previewHeight = min($sizes[1], 350);
117
+ $previewRatio = 1;
118
+
119
+ if ($sizes[1] / 350 < $sizes[0] / 500) {
120
+ $previewHeight = $sizes[1] * $previewWidth / $sizes[0] ;
121
+ $previewRatio = $sizes[1] / $previewHeight;
122
+ }else {
123
+ $previewWidth = $sizes[0] * $previewHeight / $sizes[1];
124
+ $previewRatio = $sizes[0] / $previewWidth;
125
+ }
126
+
127
+ $minWidth = min($width / $previewRatio, $previewWidth);
128
+ $minHeight = min($height / $previewRatio, $previewHeight);
129
+
130
+ if ($cropMethod == 1) {
131
+ $aspectRatio = ($width / $height);
132
+ // if ($aspectRatio * $minWidth > $sizes[0]) {
133
+ // die('a');
134
+ // $aspectRatio = ($previewWidth / $minHeight);
135
+ // }
136
+
137
+ if (1 / $aspectRatio * $minHeight > $sizes[1]) {
138
+ $aspectRatio = ($minWidth / $previewHeight);
139
+ }
140
+
141
+ if ($minWidth / $aspectRatio > $previewHeight) {
142
+ $aspectRatio = $minWidth / $previewHeight;
143
+ }
144
+ }else {
145
+ $aspectRatio = $sizes[0] / $sizes[1];
146
+ }
147
+
148
+
149
+ $smallPreviewWidth = min($width, 180);
150
+ $smallPreviewHeight = min($height, 180);
151
+
152
+ if ($width > $height) {
153
+ $smallPreviewHeight = $smallPreviewWidth * 1/ $aspectRatio;
154
+ }else {
155
+ $smallPreviewWidth = $smallPreviewHeight * $aspectRatio;
156
+ }
157
+
158
+ ?>
159
+ <div style="margin: auto; width: <?php echo $previewWidth; ?>px;">
160
+ <img style="width: <?php echo $previewWidth; ?>px; height: <?php echo $previewHeight; ?>px;" id="jcrop_target" src="<?php echo wp_get_attachment_url($_GET['postId']); ?>">
161
+ </div>
162
+ </div>
163
+ <div class="mic-right-col">
164
+ <div>
165
+ <?php _e('Original picture dimensions:','microp') ?>
166
+ <strong><?php echo $original[0]; ?> x <?php echo $original[1]; ?> px</strong><br />
167
+ <?php _e('Target picture dimensions:','microp') ?>
168
+ <strong> <?php // ($width != $width2 or $height != $height2) echo $width.' x '.$height.' px ('.$width2.' x '.$height2.' px)';
169
+ //else
170
+ echo $width.' x '.$height.' px'; ?>
171
+ </strong> (
172
+ <?php if ($cropMethod == 0) {
173
+ _e('Soft proportional crop mode','microp');
174
+ }else { _e('Hard crop mode','microp');
175
+ } ?>
176
+ )
177
+ </div>
178
+
179
+ <div class="mic-52-col">
180
+ <?php _e('New image:','microp') ?>
181
+ <br />
182
+ <div style="width: <?php echo $smallPreviewWidth; ?>px; height: <?php echo $smallPreviewHeight; ?>px; overflow: hidden; margin-left: 5px; float: right;">
183
+ <img id="preview"
184
+ src="<?php echo wp_get_attachment_url($_GET['postId']); ?>">
185
  </div>
186
+ </div>
187
+
188
+ <div class="mic-48-col">
189
+ <?php _e('Previous image:','microp');
190
+ $editedImage = wp_get_attachment_image_src($_GET['postId'], $editedSize);
191
+ ?>
192
+ <div style="width: <?php echo $smallPreviewWidth; ?>px; height: <?php echo $smallPreviewHeight; ?>px; overflow: hidden; margin-left: 5px;">
193
+ <img id="micPreviousImage" style="max-width: <?php echo $smallPreviewWidth; ?>px; max-height: <?php echo $smallPreviewHeight; ?>px;" src="<?php echo $editedImage[0] . '?' . time(); ?>">
194
+ </div>
195
+ </div>
196
+
197
+ <input id="micCropImage" class="button-primary button-large"
198
+ type="button" value="<?php _e('Crop it!','microp') ?>" /> <img
199
+ src="<?php echo includes_url(); ?>js/thickbox/loadingAnimation.gif"
200
+ id="micLoading" />
201
+
202
+
203
+ <?php
204
+ $ext = strtolower( pathinfo($src_file, PATHINFO_EXTENSION) );
205
+ if ($ext == 'jpg' || $ext == 'jpeg') {
206
+ echo '<div class="mic-option"><label for="micQuality">' . __('Target JPEG Quality', 'microp') . '</label> <select id="micQuality" name="mic_quality">
207
+ <option value="100">' . __('100 (best quality, biggest file)', 'microp') . '</option>
208
+ <option value="80" ' . ( $sizesSettings[$editedSize]['quality'] == '80' ? 'selected' : '' ) . '>' . __('80 (very high quality)', 'microp') . '</option>
209
+ <option value="70" ' . ( $sizesSettings[$editedSize]['quality'] == '70' ? 'selected' : '' ) . '>' . __('70 (high quality)', 'microp') . '</option>
210
+ <option value="60" ' . ( $sizesSettings[$editedSize]['quality'] == '60' ? 'selected' : '' ) . '>' . __('60 (good)', 'microp') . '</option>
211
+ <option value="50" ' . ( $sizesSettings[$editedSize]['quality'] == '50' ? 'selected' : '' ) . '>' . __('50 (average)', 'microp') . '</option>
212
+ <option value="30" ' . ( $sizesSettings[$editedSize]['quality'] == '30' ? 'selected' : '' ) . '>' . __('30 (low)', 'microp') . '</option>
213
+ <option value="10" ' . ( $sizesSettings[$editedSize]['quality'] == '10' ? 'selected' : '' ) . '>' . __('10 (very low, smallest file)', 'microp') . '</option>
214
+ </select></div>';
215
+ }
216
+ ?>
217
+ <?php
 
 
 
 
 
 
 
 
 
218
  if ( is_plugin_active('wp-retina-2x/wp-retina-2x.php') ) { ?>
219
+ <div class="mic-option">
220
+ <input type="checkbox" id="mic-make-2x"
221
+ <?php if(get_option('mic_make2x') === 'true' ) echo 'checked="checked"' ?> />
222
+ <label for="mic-make-2x"><?php _e('Generate Retina/HiDPI (@2x):', 'microp') ?>
223
+ <span id="mic-2x-status"></span> </label>
224
+ </div>
225
+ <?php
226
  } ?>
227
+
228
+ <div id="micSuccessMessage" class="updated below-h2">
229
+ <?php _e('The image has been cropped successfully','microp') ?>
 
 
230
  </div>
231
+ <div id="micFailureMessage" class="error below-h2">
232
+ <span class="error-message"></span><br />
233
+ <?php _e('An Error has occured. Please try again or contact plugin\'s author.','microp') ?>
234
+ </div>
235
+
236
+ </div>
237
+ </div>
238
+ <script>
239
  jQuery(document).ready(function($) {
240
  mic_attachment_id = <?php echo $_GET['postId']; ?>;
241
  mic_edited_size = '<?php echo $editedSize; ?>';
282
  }
283
  });
284
  </script>
285
+ <?php
286
+ die;
287
  }
288
  }
lib/ManualImageCropSettingsPage.php CHANGED
@@ -42,8 +42,8 @@ class MicSettingsPage
42
  {
43
  // This page will be under "Settings"
44
  add_options_page(
45
- 'Settings Admin',
46
- 'Manual Image Crop',
47
  'manage_options',
48
  'Mic-setting-admin',
49
  array( $this, 'create_admin_page' )
@@ -58,7 +58,7 @@ class MicSettingsPage
58
  ?>
59
  <div class="wrap">
60
  <?php screen_icon(); ?>
61
- <h2>Manual Image Crop Settings</h2>
62
  <form method="post" action="options.php" class="mic-settings-page">
63
  <?php
64
  // This prints out all hidden setting fields
@@ -84,14 +84,14 @@ class MicSettingsPage
84
 
85
  add_settings_section(
86
  'setting_section_id', // ID
87
- 'Mic Custom Settings', // Title
88
  array( $this, 'print_section_info' ), // Callback
89
  'Mic-setting-admin' // Page
90
  );
91
 
92
  add_settings_field(
93
  'sizes_settings', // ID
94
- 'Crop sizes settings', // Title
95
  array( $this, 'sizes_settings_callback' ), // Callback
96
  'Mic-setting-admin', // Page
97
  'setting_section_id' // Section
@@ -117,7 +117,7 @@ class MicSettingsPage
117
  */
118
  public function print_section_info()
119
  {
120
- print 'Enter your settings below:';
121
  }
122
 
123
  /**
@@ -148,7 +148,7 @@ class MicSettingsPage
148
  </thead>
149
  <tbody>';
150
 
151
- $sizesSettings = self::getSettings();
152
 
153
  foreach ($imageSizes as $s) {
154
  $label = isset($sizeLabels[$s]) ? $sizeLabels[$s] : ucfirst( str_replace( '-', ' ', $s ) );
42
  {
43
  // This page will be under "Settings"
44
  add_options_page(
45
+ __('Manual Image Crop Settings', 'microp'),
46
+ __('Manual Image Crop', 'microp'),
47
  'manage_options',
48
  'Mic-setting-admin',
49
  array( $this, 'create_admin_page' )
58
  ?>
59
  <div class="wrap">
60
  <?php screen_icon(); ?>
61
+ <h2><?php _e('Manual Image Crop Settings', 'microp'); ?></h2>
62
  <form method="post" action="options.php" class="mic-settings-page">
63
  <?php
64
  // This prints out all hidden setting fields
84
 
85
  add_settings_section(
86
  'setting_section_id', // ID
87
+ __('Mic Custom Settings', 'microp'), // Title
88
  array( $this, 'print_section_info' ), // Callback
89
  'Mic-setting-admin' // Page
90
  );
91
 
92
  add_settings_field(
93
  'sizes_settings', // ID
94
+ __('Crop sizes settings', 'microp'), // Title
95
  array( $this, 'sizes_settings_callback' ), // Callback
96
  'Mic-setting-admin', // Page
97
  'setting_section_id' // Section
117
  */
118
  public function print_section_info()
119
  {
120
+ print __('Enter your settings below:', 'microp');
121
  }
122
 
123
  /**
148
  </thead>
149
  <tbody>';
150
 
151
+ $sizesSettings = self::getSettings() || array();
152
 
153
  foreach ($imageSizes as $s) {
154
  $label = isset($sizeLabels[$s]) ? $sizeLabels[$s] : ucfirst( str_replace( '-', ' ', $s ) );
manual-image-crop.php CHANGED
@@ -3,17 +3,16 @@
3
  Plugin Name: Manual Image Crop
4
  Plugin URI: http://www.rocketmill.co.uk/wordpress-plugin-manual-image-crop
5
  Description: Plugin allows you to manually crop all the image sizes registered in your WordPress theme (in particular featured image). Simply click on the "Crop" link next to any image in your media library and select the area of the image you want to crop.
6
- Version: 1.08
7
  Author: Tomasz Sita
8
- Author URI: http://www.rocketmill.co.uk/author/tomasz
9
  License: GPL2
 
 
10
  */
11
 
12
- define('mic_VERSION', '1.08');
13
 
14
-
15
- include_once(dirname(__FILE__) . '/lib/ManualImageCrop.php');
16
- include_once(dirname(__FILE__) . '/lib/ManualImageCropEditorWindow.php');
17
  include_once(dirname(__FILE__) . '/lib/ManualImageCropSettingsPage.php');
18
 
19
  //mic - stands for Manual Image Crop
@@ -26,12 +25,12 @@ add_option('mic_make2x', 'true'); //Add option so we can persist make2x choice a
26
  * inits the plugin
27
  */
28
  function mic_init_plugin() {
29
- if (! is_admin()) {
30
- //we are gonna use our plugin in the admin area only, so ends here if it's a frontend
31
- return;
32
- }
33
 
34
- load_plugin_textdomain('microp', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
35
 
36
  $ManualImageCrop = ManualImageCrop::getInstance();
37
  add_action( 'admin_enqueue_scripts', array($ManualImageCrop, 'enqueueAssets') );
@@ -46,6 +45,7 @@ function mic_init_plugin() {
46
  * ajax call rendering the image cropping area
47
  */
48
  function mic_ajax_editor_window() {
 
49
  $ManualImageCropEditorWindow = ManualImageCropEditorWindow::getInstance();
50
  $ManualImageCropEditorWindow->renderWindow();
51
  exit;
@@ -59,4 +59,16 @@ function mic_ajax_crop_image() {
59
  $ManualImageCrop->cropImage();
60
  exit;
61
  }
62
- ;
 
 
 
 
 
 
 
 
 
 
 
 
3
  Plugin Name: Manual Image Crop
4
  Plugin URI: http://www.rocketmill.co.uk/wordpress-plugin-manual-image-crop
5
  Description: Plugin allows you to manually crop all the image sizes registered in your WordPress theme (in particular featured image). Simply click on the "Crop" link next to any image in your media library and select the area of the image you want to crop.
6
+ Version: 1.09
7
  Author: Tomasz Sita
8
+ Author URI: https://github.com/tomaszsita
9
  License: GPL2
10
+ Text Domain: microp
11
+ Domain Path: /languages/
12
  */
13
 
14
+ define('mic_VERSION', '1.09');
15
 
 
 
 
16
  include_once(dirname(__FILE__) . '/lib/ManualImageCropSettingsPage.php');
17
 
18
  //mic - stands for Manual Image Crop
25
  * inits the plugin
26
  */
27
  function mic_init_plugin() {
28
+ // we are gonna use our plugin in the admin area only, so ends here if it's a frontend
29
+ if (!is_admin()) return;
30
+
31
+ include_once(dirname(__FILE__) . '/lib/ManualImageCrop.php');
32
 
33
+ load_plugin_textdomain('microp', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
34
 
35
  $ManualImageCrop = ManualImageCrop::getInstance();
36
  add_action( 'admin_enqueue_scripts', array($ManualImageCrop, 'enqueueAssets') );
45
  * ajax call rendering the image cropping area
46
  */
47
  function mic_ajax_editor_window() {
48
+ include_once(dirname(__FILE__) . '/lib/ManualImageCropEditorWindow.php');
49
  $ManualImageCropEditorWindow = ManualImageCropEditorWindow::getInstance();
50
  $ManualImageCropEditorWindow->renderWindow();
51
  exit;
59
  $ManualImageCrop->cropImage();
60
  exit;
61
  }
62
+
63
+
64
+ /**
65
+ * add settings link on plugin page
66
+ */
67
+ function mic_settings_link($links) {
68
+ $settings_link = '<a href="options-general.php?page=Mic-setting-admin">' . __('Settings') . '</a>';
69
+ array_unshift($links, $settings_link);
70
+ return $links;
71
+ }
72
+
73
+ $plugin = plugin_basename(__FILE__);
74
+ add_filter("plugin_action_links_$plugin", 'mic_settings_link' );
readme.txt CHANGED
@@ -1,12 +1,12 @@
1
  === Manual Image Crop ===
2
  Contributors: tomasz.sita
3
  Tags: crop, cropping, thumbnail, featured image, gallery, images, picture, image, image area
4
- Tested up to: 4.0
5
- Requires at least: 3.0.1
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WB5ZQWGUM7T96
9
- Stable tag: 1.08
10
 
11
  Plugin allows you to manually crop all the image sizes registered in your WordPress theme (in particular featured image).
12
 
@@ -25,6 +25,7 @@ GitHub Repository:
25
  https://github.com/tomaszsita/wp-manual-image-crop
26
 
27
  Translations:
 
28
  * French (Gabriel Féron)
29
  * German (Bertram Greenhough)
30
  * Italian (Alessandro Curci)
@@ -46,6 +47,12 @@ Automatically:
46
  * When the plugin has been installed, Click 'Activate'
47
 
48
  == Changelog ==
 
 
 
 
 
 
49
  = 1.08 =
50
  * More descriptive error messages
51
  * Russian translation added
1
  === Manual Image Crop ===
2
  Contributors: tomasz.sita
3
  Tags: crop, cropping, thumbnail, featured image, gallery, images, picture, image, image area
4
+ Tested up to: 4.2.1
5
+ Requires at least: 3.5
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WB5ZQWGUM7T96
9
+ Stable tag: 1.09
10
 
11
  Plugin allows you to manually crop all the image sizes registered in your WordPress theme (in particular featured image).
12
 
25
  https://github.com/tomaszsita/wp-manual-image-crop
26
 
27
  Translations:
28
+ * Dutch (Bernardo Hulsman)
29
  * French (Gabriel Féron)
30
  * German (Bertram Greenhough)
31
  * Italian (Alessandro Curci)
47
  * When the plugin has been installed, Click 'Activate'
48
 
49
  == Changelog ==
50
+ = 1.09 =
51
+ * Dutch translation added
52
+ * Better error handling
53
+ * Fixed overwriting of previously saved crops
54
+ * Minor tweaks all around
55
+
56
  = 1.08 =
57
  * More descriptive error messages
58
  * Russian translation added