Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $project = "some_file.scml";
- $ADD_SPACE = 1; //Добавить пустое пространство вокруг изображения (толщина).
- if (!file_exists($project)) //В случае отсутствия файла проекта, необходимо его найти.
- {
- //echo("Project_1 not found.\n");
- $files = array();
- $dirdata = scandir(".");
- foreach ($dirdata as $key => $element) {
- if (is_file($element)) {
- $local_str_array = explode(".", $element);
- if (end($local_str_array)=="scml")
- {
- $files[] = $element;
- }
- }
- }
- if (count($files)==0)
- {
- echo("ERROR: Project not found.\n");
- die;
- }
- if (count($files)>1)
- {
- echo("ERROR: Two project files was found. Remove one of them.\n");
- die;
- }
- $project = $files[0];
- echo("Found project: ".$project."\n");
- }
- $changed_flag = false;
- function crop($filename,$new_filename,$pivot_x,$pivot_y)
- {
- global $changed_flag,$ADD_SPACE;
- //echo($pivot_x."\n");
- if(!isset($pivot_x)||!isset($pivot_y))
- {
- echo("ERROR in crop($filename): no pivot points.");
- return array(-100,-100,0,0);
- }
- $pivot_x = floatval($pivot_x);
- $pivot_y = floatval($pivot_y);
- //$filename = "headbase-0.png";
- //echo('Image: '.$filename."\n");
- $im = imagecreatefrompng($filename); //Загружаем картинку.
- //echo('true color = '.imageistruecolor($im)."\n");
- $size_x=imagesx($im); //Получаем размеры.
- $size_y=imagesy($im);
- //echo('Size = '.$x.';'.$y."\n");
- imagesavealpha ( $im , true ); //Используем прозрачный канал?
- //Ищем границы. По умолчанию это границы самого изображения.
- $x_low = 0;
- $y_low = 0;
- $x_top = $size_x;
- $y_top = $size_y;
- //Слева
- $bool = true;
- for($i=0;$i<$x_top;$i++)
- {
- for($j=0;$j<$y_top;$j++)
- {
- $rgb = imagecolorat($im, $i, $j);
- $colors = imagecolorsforindex($im, $rgb);
- if ($colors['alpha'] < 110)
- {
- //echo("break");
- $bool = false;
- break;
- }
- }
- if (!$bool) break;
- $x_low++;
- }
- //Справа
- $bool = true;
- for($i=$x_top-1;$i>=$x_low;$i--)
- {
- for($j=0;$j<$y_top;$j++)
- {
- $rgb = imagecolorat($im, $i, $j);
- $colors = imagecolorsforindex($im, $rgb);
- if ($colors['alpha'] < 110)
- {
- //echo("break");
- $bool = false;
- break;
- }
- }
- if (!$bool) break;
- $x_top--;
- }
- //Сверху (в рамках вырезанного)
- $bool = true;
- for($i=0;$i<$y_top;$i++)
- {
- for($j=$x_low;$j<$x_top;$j++)
- {
- $rgb = imagecolorat($im, $j, $i);
- $colors = imagecolorsforindex($im, $rgb);
- if ($colors['alpha'] < 110)
- {
- //echo("break");
- $bool = false;
- break;
- }
- }
- if (!$bool) break;
- $y_low++;
- }
- //Снизу
- $bool = true;
- for($i=$y_top-1;$i>=$y_low;$i--)
- {
- for($j=$x_low;$j<$x_top;$j++)
- {
- $rgb = imagecolorat($im, $j, $i);
- $colors = imagecolorsforindex($im, $rgb);
- if ($colors['alpha'] < 110)
- {
- //echo("break");
- $bool = false;
- break;
- }
- }
- if (!$bool) break;
- $y_top--;
- }
- //echo("DEBUG: $x_low, $y_low, $x_top, $y_top, $size_x, $size_y\n");
- //Картинка не изменилась. Нечего обрезать. Выходим.
- if ($x_low==$ADD_SPACE && $y_low==$ADD_SPACE && $x_top==$size_x-$ADD_SPACE && $y_top==$size_y-$ADD_SPACE)
- {
- return "SKIP";
- }
- if ($x_top==$x_low || $y_top ==$y_low) //Границы сдвинулись до нуля. Пустое изображение.
- { //Если так, то нужно уменьшить пустые пространства до 2х2. При условии, что картинки больше.
- if ($size_x == 2 && $size_y == 2)
- {
- //return array(-100,-100,0,0); //Уже дефолтный размер.
- return "2x2";
- }
- $tc = imagecreatetruecolor(2,2);
- imagesavealpha ( $tc , true );
- $transp = imagecolorallocatealpha($tc, 255, 255, 255, 127);
- imagefill($tc, 0, 0, $transp); //заливка прозрачным цветом
- //imagecopy($tc, $im, $ADD_SPACE, $ADD_SPACE, $x_low, $y_low, $new_size_x-$ADD_SPACE*2, $new_size_y-$ADD_SPACE*2);
- imagePNG($tc, $new_filename);
- //echo("Done.\n");
- $changed_flag = true;
- return array(0.5,0.5, 2,2);
- }
- //echo("OLD SIZE: $size_x, $size_y\n");
- //Новые размеры
- $new_size_x = $x_top - $x_low + $ADD_SPACE*2;
- $new_size_y = $y_top - $y_low + $ADD_SPACE*2;
- //echo("NEW SIZE: $new_size_x, $new_size_y\n");
- //Новые pivot координаты
- //Важно: pivot_y считается снизу (зеркальное отражение?)
- //echo("PIVOT_Y=$pivot_y\n");
- //echo("OLD COORD: ".(((1-$pivot_y) * $size_y)." / $size_y\n"));
- $pivot_coord_x = $pivot_x * $size_x - $x_low + $ADD_SPACE;
- $pivot_coord_y = ((1-$pivot_y) * $size_y - $y_low + $ADD_SPACE);
- //echo("NEW COORD: $pivot_coord_y / $new_size_y\n");
- $new_pivot_x = $pivot_coord_x / $new_size_x;
- $new_pivot_y = 1- ($pivot_coord_y / $new_size_y);
- //echo("NEW_PIVOT=$new_pivot_y\n");
- //Создаем копию изображения
- //echo("Writing...\n");
- $tc = imagecreatetruecolor($new_size_x, $new_size_y);
- imagesavealpha ( $tc , true );
- $transp = imagecolorallocatealpha($tc, 255, 255, 255, 127);
- imagefill($tc, 0, 0, $transp); //заливка прозрачным цветом
- imagecopy($tc, $im, $ADD_SPACE, $ADD_SPACE, $x_low, $y_low, $new_size_x-$ADD_SPACE*2, $new_size_y-$ADD_SPACE*2);
- imagePNG($tc, $new_filename);
- //echo("Done.\n");
- $changed_flag = true;
- return array($new_pivot_x,$new_pivot_y,$new_size_x,$new_size_y);
- }
- /*
- $filename = "headbase/headbase-0.png";
- $new_filename = "headbase/image-2.png";
- $pivot_x = 0.520832;
- $pivot_y = 0.186585;
- list($new_px,$new_py) = crop($filename,$new_filename,$pivot_x,$pivot_y);
- echo("New pivots: $new_px, $new_py\n");
- */
- function formatt($num)
- {
- return sprintf('%.6F', $num);
- }
- $xml = simplexml_load_file($project);
- echo($xml["scml_version"]."\n"); //1.0
- $folder = $xml->folder;
- for($f_num=0;$f_num<count($folder);$f_num++)
- {
- print($folder[$f_num]["name"]."\n");
- $files=$folder[$f_num]->file;
- for($ff=0;$ff<count($files);$ff++)
- {
- //if ( $files[$ff]["name"] != "face/face-31.png") continue;
- //print("Found pivot y = ".$files[$ff]["pivot_y"]."\n");
- $result = crop($files[$ff]["name"],str_replace("/","\\",$files[$ff]["name"]),$files[$ff]["pivot_x"],$files[$ff]["pivot_y"]);
- if (gettype($result)=="string") //Ошибка. Файл не был изменен.
- {
- echo("\t".$files[$ff]["name"]." ".($result)."\n");
- continue;
- }
- list($new_px,$new_py,$width,$height) = $result;
- $file_is_changed = !(empty($new_px)||$new_px==-100);
- if ($file_is_changed)
- {
- if (!empty($new_px))
- {
- $files[$ff]["pivot_x"] = formatt($new_px);
- $files[$ff]["pivot_y"] = formatt($new_py);
- }
- $files[$ff]["width"] = $width;
- $files[$ff]["height"] = $height;
- }
- echo("\t".$files[$ff]["name"]." ".($new_px==-100?"ERROR":"")."\n");
- //$files[$ff]["name"] = "HAHAHAHA";
- }
- }
- if ($changed_flag)
- {
- echo("Writing...\n");
- $xml->asXML($project);
- }
- else echo ("No changes.");
- echo("Done.\n");
- sleep(3);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement