Example usage for com.badlogic.gdx.tools.texturepacker TexturePacker TexturePacker

List of usage examples for com.badlogic.gdx.tools.texturepacker TexturePacker TexturePacker

Introduction

In this page you can find the example usage for com.badlogic.gdx.tools.texturepacker TexturePacker TexturePacker.

Prototype

public TexturePacker(Settings settings) 

Source Link

Usage

From source file:com.o2d.pkayjava.editor.proxy.ProjectManager.java

License:Apache License

public void importSpriteAnimationsIntoProject(final Array<FileHandle> fileHandles,
        ProgressHandler progressHandler) {
    if (fileHandles == null) {
        return;//from w  w  w . j a  va2s. co m
    }
    handler = progressHandler;

    ExecutorService executor = Executors.newSingleThreadExecutor();

    executor.execute(() -> {

        String newAnimName = null;

        String rawFileName = fileHandles.get(0).name();
        String fileExtension = FilenameUtils.getExtension(rawFileName);
        if (fileExtension.equals("png")) {
            Settings settings = new Settings();
            settings.square = true;
            settings.flattenPaths = true;

            TexturePacker texturePacker = new TexturePacker(settings);
            FileHandle pngsDir = new FileHandle(fileHandles.get(0).parent().path());
            for (FileHandle entry : pngsDir.list(Overlap2DUtils.PNG_FILTER)) {
                texturePacker.addImage(entry.file());
            }
            String fileNameWithoutExt = FilenameUtils.removeExtension(rawFileName);
            String fileNameWithoutFrame = fileNameWithoutExt.replaceAll("\\d*$", "");
            String targetPath = currentWorkingPath + "/" + currentProjectVO.projectName
                    + "/assets/orig/sprite-animations" + File.separator + fileNameWithoutFrame;
            File targetDir = new File(targetPath);
            if (targetDir.exists()) {
                try {
                    FileUtils.deleteDirectory(targetDir);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            texturePacker.pack(targetDir, fileNameWithoutFrame);
            newAnimName = fileNameWithoutFrame;
        } else {
            for (FileHandle fileHandle : fileHandles) {
                try {
                    Array<File> imgs = getAtlasPages(fileHandle);
                    String fileNameWithoutExt = FilenameUtils.removeExtension(fileHandle.name());
                    String targetPath = currentWorkingPath + "/" + currentProjectVO.projectName
                            + "/assets/orig/sprite-animations" + File.separator + fileNameWithoutExt;
                    File targetDir = new File(targetPath);
                    if (targetDir.exists()) {
                        FileUtils.deleteDirectory(targetDir);
                    }
                    for (File img : imgs) {
                        FileUtils.copyFileToDirectory(img, targetDir);
                    }
                    FileUtils.copyFileToDirectory(fileHandle.file(), targetDir);
                    newAnimName = fileNameWithoutExt;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        if (newAnimName != null) {
            ResolutionManager resolutionManager = facade.retrieveProxy(ResolutionManager.NAME);
            resolutionManager.resizeSpriteAnimationForAllResolutions(newAnimName, currentProjectInfoVO);
        }
    });
    executor.execute(() -> {
        changePercentBy(100 - currentPercent);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        handler.progressComplete();
    });
    executor.shutdown();
}

From source file:com.o2d.pkayjava.editor.proxy.ResolutionManager.java

License:Apache License

public void rePackProjectImages(ResolutionEntryVO resEntry) {
    ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
    TexturePacker.Settings settings = new TexturePacker.Settings();

    settings.flattenPaths = true;//from  www  . j  a  v a  2s  .  c o m
    //        settings.maxHeight = getMinSquareNum(resEntry.height);
    //        settings.maxWidth = getMinSquareNum(resEntry.height);
    settings.maxHeight = Integer.parseInt(projectManager.getCurrentProjectVO().texturepackerHeight);
    settings.maxWidth = Integer.parseInt(projectManager.getCurrentProjectVO().texturepackerWidth);
    settings.filterMag = Texture.TextureFilter.Linear;
    settings.filterMin = Texture.TextureFilter.Linear;

    TexturePacker tp = new TexturePacker(settings);

    String sourcePath = projectManager.getCurrentWorkingPath() + "/"
            + projectManager.getCurrentProjectVO().projectName + "/assets/" + resEntry.name + "/images";
    String outputPath = projectManager.getCurrentWorkingPath() + "/"
            + projectManager.getCurrentProjectVO().projectName + "/assets/" + resEntry.name + "/pack";

    FileHandle sourceDir = new FileHandle(sourcePath);
    File outputDir = new File(outputPath);

    try {
        FileUtils.forceMkdir(outputDir);
        FileUtils.cleanDirectory(outputDir);
    } catch (IOException e) {
        e.printStackTrace();
    }

    for (FileHandle entry : sourceDir.list()) {
        String filename = entry.file().getName();
        String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length()).toLowerCase();
        if (extension.equals("png")) {
            tp.addImage(entry.file());
        }
    }

    tp.pack(outputDir, "pack");
}

From source file:com.o2d.pkayjava.editor.proxy.ResolutionManager.java

License:Apache License

public void resizeImagesTmpDirToResolution(String packName, File sourceFolder, ResolutionEntryVO resolution,
        File targetFolder) {/*from w w  w  .j  a  v a  2s  .  c o  m*/
    ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
    float ratio = ResolutionManager.getResolutionRatio(resolution,
            projectManager.getCurrentProjectInfoVO().originalResolution);

    if (targetFolder.exists()) {
        try {
            FileUtils.cleanDirectory(targetFolder);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // now pack
    TexturePacker.Settings settings = new TexturePacker.Settings();

    settings.flattenPaths = true;
    settings.maxHeight = getMinSquareNum(resolution.height);
    settings.maxWidth = getMinSquareNum(resolution.height);
    settings.filterMag = Texture.TextureFilter.Linear;
    settings.filterMin = Texture.TextureFilter.Linear;

    TexturePacker tp = new TexturePacker(settings);
    for (final File fileEntry : sourceFolder.listFiles()) {
        if (!fileEntry.isDirectory()) {
            BufferedImage bufferedImage = ResolutionManager.imageResize(fileEntry, ratio);
            tp.addImage(bufferedImage, FilenameUtils.removeExtension(fileEntry.getName()));
        }
    }

    tp.pack(targetFolder, packName);
}

From source file:com.uwsoft.editor.controlles.ResolutionManager.java

License:Apache License

public void rePackProjectImages(ResolutionEntryVO resEntry) {
    TexturePacker.Settings settings = new TexturePacker.Settings();

    settings.flattenPaths = true;/*  ww w  . ja v  a 2  s  .com*/
    //        settings.maxHeight = getMinSquareNum(resEntry.height);
    //        settings.maxWidth = getMinSquareNum(resEntry.height);
    settings.maxHeight = Integer.parseInt(dataManager.getCurrentProjectVO().texturepackerHeight);
    settings.maxWidth = Integer.parseInt(dataManager.getCurrentProjectVO().texturepackerWidth);
    settings.filterMag = Texture.TextureFilter.Linear;
    settings.filterMin = Texture.TextureFilter.Linear;

    TexturePacker tp = new TexturePacker(settings);

    String sourcePath = dataManager.getCurrentWorkingPath() + "/"
            + dataManager.getCurrentProjectVO().projectName + "/assets/" + resEntry.name + "/images";
    String outputPath = dataManager.getCurrentWorkingPath() + "/"
            + dataManager.getCurrentProjectVO().projectName + "/assets/" + resEntry.name + "/pack";

    FileHandle sourceDir = new FileHandle(sourcePath);
    File outputDir = new File(outputPath);

    try {
        FileUtils.forceMkdir(outputDir);
        FileUtils.cleanDirectory(outputDir);
    } catch (IOException e) {
        e.printStackTrace();
    }

    for (FileHandle entry : sourceDir.list()) {
        String filename = entry.file().getName();
        String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length()).toLowerCase();
        if (extension.equals("png")) {
            tp.addImage(entry.file());
        }
    }

    tp.pack(outputDir, "pack");
}

From source file:com.uwsoft.editor.controlles.ResolutionManager.java

License:Apache License

public void resizeImagesTmpDirToResolution(String packName, File sourceFolder, ResolutionEntryVO resolution,
        File targetFolder) {//from   ww  w.ja v a2s  .  c o m
    float ratio = ResolutionManager.getResolutionRatio(resolution,
            dataManager.getCurrentProjectInfoVO().originalResolution);

    if (targetFolder.exists()) {
        try {
            FileUtils.cleanDirectory(targetFolder);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // now pack
    TexturePacker.Settings settings = new TexturePacker.Settings();

    settings.flattenPaths = true;
    settings.maxHeight = getMinSquareNum(resolution.height);
    settings.maxWidth = getMinSquareNum(resolution.height);
    settings.filterMag = Texture.TextureFilter.Linear;
    settings.filterMin = Texture.TextureFilter.Linear;

    TexturePacker tp = new TexturePacker(settings);
    for (final File fileEntry : sourceFolder.listFiles()) {
        if (!fileEntry.isDirectory()) {
            BufferedImage bufferedImage = ResolutionManager.imageResize(fileEntry, ratio);
            tp.addImage(bufferedImage, FilenameUtils.removeExtension(fileEntry.getName()));
        }
    }

    tp.pack(targetFolder, packName);
}

From source file:com.uwsoft.editor.data.manager.DataManager.java

License:Apache License

public void importExternalSpriteAnimationsIntoProject(final ArrayList<File> files,
        ProgressHandler progressHandler) {
    if (files.size() == 0) {
        return;/*  www . j  a  v a  2  s.  c  om*/
    }
    handler = progressHandler;

    ExecutorService executor = Executors.newSingleThreadExecutor();

    executor.execute(new Runnable() {
        @Override
        public void run() {

            String newAnimName = null;

            String rawFileName = files.get(0).getName();
            String fileExtension = FilenameUtils.getExtension(rawFileName);
            if (fileExtension.equals("png")) {
                Settings settings = new Settings();
                settings.square = true;
                settings.flattenPaths = true;

                TexturePacker texturePacker = new TexturePacker(settings);
                FileHandle pngsDir = new FileHandle(files.get(0).getParentFile().getAbsolutePath());
                for (FileHandle entry : pngsDir.list(new PngFilenameFilter())) {
                    texturePacker.addImage(entry.file());
                }
                String fileNameWithoutExt = FilenameUtils.removeExtension(rawFileName);
                String fileNameWithoutFrame = fileNameWithoutExt.replaceAll("\\d*$", "");
                String targetPath = currentWorkingPath + "/" + currentProjectVO.projectName
                        + "/assets/orig/sprite-animations" + File.separator + fileNameWithoutFrame;
                File targetDir = new File(targetPath);
                if (targetDir.exists()) {
                    try {
                        FileUtils.deleteDirectory(targetDir);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                texturePacker.pack(targetDir, fileNameWithoutFrame);
                newAnimName = fileNameWithoutFrame;
            } else {
                for (File file : files) {
                    try {
                        ArrayList<File> imgs = getAtlasPages(file);
                        String fileNameWithoutExt = FilenameUtils.removeExtension(file.getName());
                        String targetPath = currentWorkingPath + "/" + currentProjectVO.projectName
                                + "/assets/orig/sprite-animations" + File.separator + fileNameWithoutExt;
                        File targetDir = new File(targetPath);
                        if (targetDir.exists()) {
                            FileUtils.deleteDirectory(targetDir);
                        }
                        for (File img : imgs) {
                            FileUtils.copyFileToDirectory(img, targetDir);
                        }
                        FileUtils.copyFileToDirectory(file, targetDir);
                        newAnimName = fileNameWithoutExt;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            if (newAnimName != null) {
                resolutionManager.resizeSpriteAnimationForAllResolutions(newAnimName, currentProjectInfoVO);
            }
        }
    });
    executor.execute(new Runnable() {
        @Override
        public void run() {
            changePercentBy(100 - currentPercent);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            handler.progressComplete();
        }
    });
    executor.shutdown();
}

From source file:phasereditor.atlas.core.internal.libgdx.LibGDXTexturePackerLauncher.java

License:Open Source License

@SuppressWarnings("static-method")
public void pack() throws Exception {
    Settings settings = new TexturePacker.Settings();
    // settings.maxWidth = 60;
    // settings.maxHeight = 60;
    settings.pot = false;/*from www.j  av  a  2  s. com*/
    settings.stripWhitespaceX = true;
    settings.stripWhitespaceY = true;
    settings.paddingX = 30;
    settings.paddingY = 30;
    settings.edgePadding = true;

    File dir = new File("C:/Users/arian/Documents/Source/Phaser Editor/Documents/Test/Trim/");

    File[] inputFiles = new File[] { new File(dir, "Circle.png"), new File(dir, "Rect.png") };

    // Sort input files by name to avoid platform-dependent atlas output
    // changes.
    Arrays.sort(inputFiles, new Comparator<File>() {
        @Override
        public int compare(File file1, File file2) {
            return file1.getName().compareTo(file2.getName());
        }
    });

    TexturePacker packer = new TexturePacker(settings);
    for (File file : inputFiles) {
        packer.addImage(file);
    }

    File gdxDir = new File(dir, "libgdx");
    packer.pack(gdxDir, "output");

    TextureAtlasData data = new TextureAtlasData(new FileHandle(new File(gdxDir, "output.atlas")),
            new FileHandle(gdxDir), false);

    for (Page page : data.getPages()) {
        out.println(page.textureFile.name());
    }
    for (Region r : data.getRegions()) {
        out.println(r.page.textureFile.name());
        out.println(r.name);
    }
    // processor.process(new File(input), new File(output));
}

From source file:phasereditor.atlas.ui.editors.AtlasGeneratorEditor.java

License:Open Source License

void build(boolean dirty, Runnable whenDone) {

    if (_model == null) {
        return;/*ww w. j  ava  2  s . c  om*/
    }

    _guessLastOutputFiles = _model.guessOutputFiles();

    if (dirty) {
        dirtify();
    }

    Job job = new Job("Build atlas '" + _model.getFile().getName() + "'") {

        @Override
        protected IStatus run(IProgressMonitor monitor) {
            monitor.beginTask("Building atlas '" + _model.getFile().getName() + "'", 2);

            // build new atlas
            SettingsBean settings = _model.getSettings();

            TexturePacker packer = new TexturePacker(settings);

            List<IFile> missingFiles = new ArrayList<>();

            for (IFile wsFile : _model.getImageFiles()) {
                File file = eclipseFileToJavaPath(wsFile).toFile();
                if (file.exists() && file.isFile()) {
                    packer.addImage(file);
                } else {
                    missingFiles.add(wsFile);
                }
            }

            if (!missingFiles.isEmpty()) {
                Shell shell = getSite().getShell();
                AtomicBoolean confirm = new AtomicBoolean(false);
                shell.getDisplay().syncExec(new Runnable() {

                    @Override
                    public void run() {
                        StringBuilder sb = new StringBuilder();
                        for (IFile f : missingFiles) {
                            sb.append("    " + f.getName() + "\n");
                        }
                        if (MessageDialog.openConfirm(shell, "Atlas Build", String.format(
                                "The following source images do not exist. Do you want to ignore them?\n\n%s",
                                sb))) {
                            confirm.set(true);
                        }
                    }
                });
                if (!confirm.get()) {
                    return Status.CANCEL_STATUS;
                }

                _model.getImageFiles().removeAll(missingFiles);
            }

            monitor.worked(1);
            File tempDir = null;
            try {
                // create atlas files in temporal folder
                tempDir = Files.createTempDirectory("PhaserEditor_Atlas_").toFile();
                String atlasName = _model.getAtlasName();
                packer.pack(tempDir, atlasName);

                // read generated atlas file

                File libgdxAtlasFile = new File(tempDir, atlasName + ".atlas");

                out.println("Temporal atlas file " + libgdxAtlasFile);

                out.println(new String(Files.readAllBytes(libgdxAtlasFile.toPath())));

                TextureAtlasData data = new TextureAtlasData(new FileHandle(libgdxAtlasFile),
                        new FileHandle(tempDir), false);

                // create result model

                Result oldResult = _result;

                _result = new Result();

                ImageLoader loader = new ImageLoader();

                Array<Region> regions = data.getRegions();

                _frameRegionNameMap = new HashMap<>();

                for (TextureAtlasData.Page page : data.getPages()) {
                    File textureFile = page.textureFile.file();

                    ImageData[] imgData = loader.load(textureFile.getAbsolutePath());
                    Image img = new Image(Display.getDefault(), imgData[0]);

                    ResultPage resultPage = new ResultPage();
                    resultPage.setImage(img);

                    for (Region region : regions) {
                        if (region.page == page) {
                            AtlasFrame frame = new AtlasFrame();

                            String regionName = region.name;
                            if (region.index != -1) {
                                regionName += "_" + region.index;
                            }
                            frame.setName(PhaserEditorUI.getNameFromFilename(regionName));
                            frame.setFrameX(region.left);
                            frame.setFrameY(region.top);
                            frame.setFrameW(region.width);
                            frame.setFrameH(region.height);

                            // todo: only if trimmed!
                            frame.setSpriteX((int) (region.offsetX));

                            // this happens when white spaces are stripped!
                            if (region.offsetY != 0) {
                                // LibGDX uses the OpenGL Y order (from
                                // bottom to top)
                                frame.setSpriteY(
                                        (int) (region.originalHeight - region.offsetY - region.height));
                            }

                            frame.setSpriteW(region.width);
                            frame.setSpriteH(region.height);

                            frame.setSourceW(region.originalWidth);
                            frame.setSourceH(region.originalHeight);

                            resultPage.addFrame(frame, regionName, region.index);
                            _frameRegionNameMap.put(frame, regionName);
                        }
                    }
                    if (settings.useIndexes) {
                        resultPage.sortByIndexes();
                    }
                    _result.getPages().add(resultPage);
                }

                // create editor model

                List<EditorPage> editorPages = new ArrayList<>();
                for (ResultPage resultPage : _result.getPages()) {
                    {
                        out.println("page " + resultPage.getImage().getBounds());
                    }
                    EditorPage editorPage = new EditorPage();
                    editorPage.addAll(resultPage.getFrames());
                    editorPages.add(editorPage);
                }
                _model.setPages(editorPages);

                monitor.worked(1);

                // update editor

                swtRun(new Runnable() {

                    @Override
                    public void run() {
                        postBuild(_result);

                        try {
                            if (oldResult != null) {
                                oldResult.dispose();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                        if (whenDone != null) {
                            whenDone.run();
                        }
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (Exception e) {
                e.printStackTrace();
                swtRun(new Runnable() {

                    @Override
                    public void run() {
                        MessageDialog.openError(getEditorSite().getShell(), "Build Atlas", e.getMessage());
                        openSettingsDialog();
                    }
                });
            } finally {
                try {
                    // delete temporal files
                    if (tempDir != null) {
                        for (File f : tempDir.listFiles()) {
                            f.delete();
                        }
                        tempDir.delete();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            return Status.OK_STATUS;

        }
    };

    job.setUser(true);
    job.schedule();
}